Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как форматировать колонку .. (https://javascript.ru/forum/misc/37684-kak-formatirovat-kolonku.html)

Paulyyy 01.05.2013 16:41

как форматировать колонку ..
 
Всем привет. Есть csv файл с примерным содержанием ..
Account Number,"Name","Company"
01-000667,"George P Schell","Market Place Products"
01-002423,"Marc S Brittan","Madson & Huth Communication Co"...

по сколько javascript на прямую не работает с файлами и по скольку у меня нет опыта с серверной частью, данные файла были вставлены в в body.. вопрос.. как можно обратиться к колонке Name и поменять формат с Name, Middle Initial, Last Name на формат Name, Last Name, Middle Initial для всех имен?
Заранее спасибо!

Paulyyy 01.05.2013 19:07

Вложений: 1
К примеру. Можно ли обратиться к колонке Name и все что ниже нее отсортировать чтобы отображалось в браузере не George P Schell а George Schell P и так все ниже стоящие имена?
Буду очень благодарна! ..)

ksa 02.05.2013 23:51

Цитата:

Сообщение от Paulyyy
по скольку у меня нет опыта с серверной частью, данные файла были вставлены в в body

Хоть бы теги табличные при этом добавил бы...

Цитата:

Сообщение от Paulyyy
Можно ли обратиться к колонке Name

Нет у тебя никакой колонки... Есть гольный текст и ничего более.

Aetae 03.05.2013 08:22

Вообще в современных браузерах вполне себе работает с файлами :) :
<!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 (Сообщение 248800)
Нет у тебя никакой колонки... Есть гольный текст и ничего более.

CSV же, это какбэ потенциальная таблица.)
Тут хотят с помощью js решать вопросы к web-разработке не относящиеся, как раз такое люблю, потому помогу.))

ksa 03.05.2013 09:40

Цитата:

Сообщение от Aetae
CSV же, это какбэ потенциальная таблица.)

Именно потенциальная. :D Только той потенцией еще воспользоваться нужно... Если тупо все в кучу свалить это будет просто голимый тескт с которым еще работать и работать...

Цитата:

Сообщение от Aetae
как раз такое люблю

Я наоборот противник создания таких проблем, а потом героического их решения... :)

Paulyyy 05.05.2013 15:12

Aetae, cпасибо !! :)


Часовой пояс GMT +3, время: 03:07.