Показать сообщение отдельно
  #4 (permalink)  
Старый 03.05.2013, 08:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Вообще в современных браузерах вполне себе работает с файлами :
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
	<meta charset="UTF-8">
	<title></title>
	<style type="text/css">
	*{margin:0;padding:0}
	html, body{
		width: 100%;
		height: 100%;
	}
	
	html, body, textarea, input{
		font: 20px serif;
		background-color: #220;
		color: #ddf;
	}
	
	textarea{width: 100%;
		height: 90%;
		border: none;
	}
	</style>
<script type="text/javascript">
function read(files){ //чтение файлов
	var i = files.length, 
		reader = new FileReader();

	reader.onload = function(){
		example( reader.result )
	};
	
	reader.readAsText(files[--i])
}

function arrayFromCSV( csv ){
	var lines = csv.split(/[\r\n]+/), i = lines.length, //разбиваем на строки
		array = new Array(i); // создаём массив
	
	while(i--) array[i] = lines[i].split(','); //разбиваем по запятым, и заполняем массив 

	return array
}

function arrayToCSV( array ){
	var csv = '';
	console.log(array)
	for(var i = 0, l = array.length; i<l; i++){
		csv += (array[i] && array[i].join(',') || '') + '\r\n';
	}
	return csv
}
	
	
function rearrangeCols( array, order ){ //поменять местами колонки
	var l = array.length,
		out = new Array(l);
	
	if(typeof order === 'number') order = Array.prototype.slice.call(arguments,1); //порядок может быть передан как массивом, ак и просто последовательно
	var i = order.length;
		
	while(l--){
		out[l] = new Array(i);
		for(var j = i; j--;){
			out[l][j] = array[l][order[j]];
		}
	}
	return out
}	

function rearrangeRows( array, order ){ //поменять местами ряды
	var l = array.length,
		out = [array[0]],
		def = array[0].length;
	
	if(typeof order === 'number') order = Array.prototype.slice.call(arguments,1);
		
	for(var i = 0, l = order.length; i<l; i++){
		out.push( array[order[i]+1] || new Array(def) );
	}
	
	return out
}	

function id(i){return document.getElementById(i)}


function example( csv ){
	var table = arrayFromCSV( csv ),
		text = id('textarea');
	
	
	text.value = arrayToCSV( table );	
	
	table = rearrangeCols( table, 0, 2, 1 ) 

	text.value += '\n===== rearrangeCols( table, 0, 2, 1 ) =====\n' +
		arrayToCSV( table );	
		
		
	table = rearrangeRows( table, 1, 2, 0 ) 

	text.value += '\n===== rearrangeRows( table, 0, 2, 1 ) =====\n' +
		arrayToCSV( table );	
		
		
	
	
	
	function rearrangeArray( array , first, second){ //меняет местами элементы массива
		var temp;
		temp = array[first];
		array[first] = array[second];
		array[second] = first;
		return array
	}
	
	
	
	function fixNames( array ){
		var i = array.length, 
			nameCell = 2; //орядковым номер ячесйки с именем
		
		while(i--){
			if(array[i][nameCell]){ //если ячейча с порядковым номером 2 существует
				var name = array[i][nameCell]
					.slice(1,-1)	//обрезаем кавычки
					.split(/\s+/);  //разбиваем по пробелу
				if(name.length === 3) name[2] = name.splice(1,1,name[2])[0]; //меняем порядок
				array[i][nameCell] = '"' + name.join(' ') + '"'; //склеиваем обратно
			}
		}	
			
		return array
	}
	
	text.value += '===== fixNames =====\n' +
		arrayToCSV( fixNames( table ) );	
		
}	
	
</script>
</head>
<body>
	<input  id="file" type="file" onchange="read(files)" />
	<textarea id="textarea"></textarea>
</body>
</html>


Сообщение от ksa Посмотреть сообщение
Нет у тебя никакой колонки... Есть гольный текст и ничего более.
CSV же, это какбэ потенциальная таблица.)
Тут хотят с помощью js решать вопросы к web-разработке не относящиеся, как раз такое люблю, потому помогу.))
__________________
29375, 35

Последний раз редактировалось Aetae, 03.05.2013 в 08:25.
Ответить с цитированием