Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Парсинг CSV для калькулятора (https://javascript.ru/forum/dom-window/34686-parsing-csv-dlya-kalkulyatora.html)

Axios 15.01.2013 08:31

Парсинг CSV для калькулятора
 
Помогите плиз с парсингом

делал на php вот так

<?php
			@$file = fopen('price.csv', 'r') or die('Ошибка');
			flock($file, 1);
			echo '<table cellspacing="0" cellpadding="5" border="1" width="100%" id="MyTable">';
			echo "\n";
			while(!feof($file)) {
			$Mass = fgetcsv($file, 1024, ';');
			$j = count($Mass);
			if ($j != 1) {
			echo '<tr align="center">' . "\n";
			for ($k=0; $k<$j; $k++) { echo '<td><input type="text" value='. $Mass[$k] . "></td>\n";
			}
			echo "</tr>\n";
			}
			}
			echo '</table>';
			flock($file, 3); // 3 == LOCK_UN
			fclose($file);
?>


но потом не совсем удобно обращаться к содержимому ячейки, приходится вставлять input чтоб корректно получать значения ячеек, пользовался вот этим, например:

proj1 = MyTable.rows[1].cells[0].firstChild.value;


в итоге на странице появляется огромная таблица с input, которую приходится скрывать.

Что хотелось бы, известно общее количество строк и столбцов оно определено, примерно 40 столбцов и 70 строк, они имеют примерный вид и содержимое (разделю для понятности символом | ):

Код:

Курс General | 1 | 1 | 240 | 300 | 350 | 400 | и т. д. ...
Мне нужно получить несколько типов несколько типов массиво:

Массивы типа 1:

course1 = [Курс General, 1, 1, 240, 300, 350, 400 и т. д. ...]
course2 = [Курс Business, 1, 1, 400, 450, 650, 700 и т. д. ...]
... таких массивов будет по количеству строк, т.е. 70, по идее они должны как-то автоматически строится


Массивы типа 2 это массив из первого столбца

name1 = [Курс general, Курс Business, ... и т.д.]


Или лучше из php парсить в строку типа:

Курс General, 1, 1, 240, 300, 350, 400 и т. д. ...


а потом из нее получать массив?

Просто не хочется лишнего мусора на странице



Сразу отвечу на вопрос для чего это:

Менеджер заполняет определенным образом CSV со стоимостью школ и курсов (там очень сложная таблица с большим количеством параметров) а потом все это превращается в калькулятор стоимости курса

ksa 15.01.2013 11:10

Цитата:

Сообщение от Axios
Помогите плиз с парсингом

Таки "с парсингом" чего именно?

Axios 15.01.2013 11:56

Я хочу распарсить CSV без php, так как редактор режет php код и приходится изворачиваться фреймом

ksa 15.01.2013 13:11

Цитата:

Сообщение от Axios
Я хочу распарсить CSV без php

JS не работает с файлами (в общем смысле)...

ksa 15.01.2013 13:12

Цитата:

Сообщение от Axios
Менеджер заполняет определенным образом CSV

Вообще не понятно почему не используется какая-то база данных... Почему у тебя все в каких-то файлах? :)

Serg_pnz 15.01.2013 13:43

Цитата:

Сообщение от ksa (Сообщение 227349)
Вообще не понятно почему не используется какая-то база данных... Почему у тебя все в каких-то файлах? :)

Ну не всегда они базы нужны, да еще по ТЗ захочет админку, а так отдал ему csv и пусть там раз в год цены меняет.

По сабжу. Массив можно получить напрямую, сначала забрав по строкам, потом распарсив по ограничителю (тчк-с-зпт)
Но есть одна неприятность, которая всё может усложнить, даже их три:
1. Переводы строк при подготовке csv никто не отменял, блондинка может нафтыкать, тогда строки собьются в кашу
2. и 3. Двоеточия и тчк-с-запятые в тексте - они экранируются, или экранируется вся ячейка - нельзя об этом забывать тоже.

Есть же какая-то в пыхе функция - сам разбирает, если правильно настроена локаль и кодировка /*могу наврать!*/

ksa 15.01.2013 14:32

Цитата:

Сообщение от Serg_pnz
Но есть одна неприятность, которая всё может усложнить, даже их три

Вот потому-то лучше использовать БД. :)

Serg_pnz 15.01.2013 15:58

Цитата:

Сообщение от ksa (Сообщение 227359)
Вот потому-то лучше использовать БД. :)

Вот поэтому я написал себе посимвольный парсер csv и мне по барабану криворукий "оформитель"))

Кстати, а не проще там, где в инпуте хранится значение просто ячейке давать номер по флагам? Ну как-то
<td flag="3_15">значение</td>
, что будет соответствовать третьему столбцу, 15 строке?
И вообще зачем нам эти инпуты? Пусть php сгенерит json, ява разберет и в путь.

Axios 15.01.2013 20:43

Serj, может код скинуть присвоения флага и его обработку в дальнейшем.

Кстати, возникла проблемка. что если в поле стоит 2 слово или 3, то они обрезаются и остается только одно, первое

Serg_pnz 15.01.2013 21:36

Axios,
я "пыхер", все делаю на jquery. И как бы
$('td').attr('flag', x+'_'y).html() // блин, простите, вечер удался....
рулит. Как-то так....

Короче, если есть массив, а таблица не нужна, то гоните всё в json, а там распарсивайте и обрабатывайте.

//Давайте не будем писать своих аккордионов, ибо! Есть у меня такой в жизни неудачный пример. сцк, работает, но зачеее-ем! когда библиотека под это уже заточена.

зы, куда без него?: да, на жквери! и мутулсе.


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