Парсинг 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 со стоимостью школ и курсов (там очень сложная таблица с большим количеством параметров) а потом все это превращается в калькулятор стоимости курса |
Цитата:
|
Я хочу распарсить CSV без php, так как редактор режет php код и приходится изворачиваться фреймом
|
Цитата:
|
Цитата:
|
Цитата:
По сабжу. Массив можно получить напрямую, сначала забрав по строкам, потом распарсив по ограничителю (тчк-с-зпт) Но есть одна неприятность, которая всё может усложнить, даже их три: 1. Переводы строк при подготовке csv никто не отменял, блондинка может нафтыкать, тогда строки собьются в кашу 2. и 3. Двоеточия и тчк-с-запятые в тексте - они экранируются, или экранируется вся ячейка - нельзя об этом забывать тоже. Есть же какая-то в пыхе функция - сам разбирает, если правильно настроена локаль и кодировка /*могу наврать!*/ |
Цитата:
|
Цитата:
Кстати, а не проще там, где в инпуте хранится значение просто ячейке давать номер по флагам? Ну как-то <td flag="3_15">значение</td>, что будет соответствовать третьему столбцу, 15 строке? И вообще зачем нам эти инпуты? Пусть php сгенерит json, ява разберет и в путь. |
Serj, может код скинуть присвоения флага и его обработку в дальнейшем.
Кстати, возникла проблемка. что если в поле стоит 2 слово или 3, то они обрезаются и остается только одно, первое |
Axios,
я "пыхер", все делаю на jquery. И как бы $('td').attr('flag', x+'_'y).html() // блин, простите, вечер удался....рулит. Как-то так.... Короче, если есть массив, а таблица не нужна, то гоните всё в json, а там распарсивайте и обрабатывайте. //Давайте не будем писать своих аккордионов, ибо! Есть у меня такой в жизни неудачный пример. сцк, работает, но зачеее-ем! когда библиотека под это уже заточена. зы, куда без него?: да, на жквери! и мутулсе. |
Парни, не селен я в php особо, если для вас это просто то помогите плиз, просто уже голова не шарит. Клиенту надо именно подгрузка CSV и именно такого формата
Есть у меня файлик http://zharovs.ru/1en/price.csv look - отображать в списке курсов или нет (взял для простоты 1 и 0 соответсвенно) min - минимальное количество недель для данного курса может кто подскажет как поудобней все это обрабатывать принцип работы должен быть такой: 1. Пользователь (П) выбирает кол-во недель - определятся столбец в таблице 2. П выбирает тип курса по нему определяет строка в таблице для курса и совместно с кол-во недель определяется ячейка стоимости курса 3. П выбирает тип проживания и по нему совместно с количеством недель определяется стоимость проживания в итоге мы получаем: Стоимость проживания и стоимость курса обучения с этой частью я как-бы справился Ну так же просто все вычленить стоимость дополнительных услуг и определить сезонность в зависимости от выбранного месяца Вся сложность у меня встала при проверки на look и min look - отображать в списке курсов или нет (взял для простоты 1 и 0 соответсвенно) min - минимальное количество недель для данного курса думал как сделать строку следующего вида но инфы не нашел, а сам пхп не особо <tr> <td class="tdName_1">General</td> <td class="look_1">1</td> <td class="min_1">1</td> <td class="1_4">200</td> <td class="1_5">210</td> <td class="1_6">220</td> ... </tr> <tr> <td class="tdName_2">Business</td> <td class="look_2">1</td> <td class="min_2">1</td> <td class="2_4">200</td> <td class="2_5">250</td> <td class="2_6">300</td> ... </tr> Благодаря коду скрипта course1 = MyTable.rows[2].cells[0].firstChild.value; course2 = MyTable.rows[3].cells[0].firstChild.value; course3 = MyTable.rows[4].cells[0].firstChild.value; course4 = MyTable.rows[5].cells[0].firstChild.value; .... /*Составляем массив из курсов и транспанируем его в выподающий список*/ var course = [course1, course2, course3, course4, course5, course6, course7, course8, course9, course10, course11, course12, course13, course14, course15, course16, course17, course18, course19, course20, course21, course22, course23, course24, course25, course26]; $.map(course, function(value,key) { $('#type_course').append($("<option>", {value: key,text: value})); }) получается вполне отличный список <select id="type_course" name="type_course"> <option value="0">General</option> <option value="1">Business</option> <option value="2">Intensive</option> <option value="3">One-to-One</option> <option value="4">Детская_программа</option> <option value="5">Специнтенсив</option> ... </select> Но как сделать проверку на look, т.е. есть этот курс в этой школе или нет (один файлик на одну школу, но в файле общие поля на всех) как сделать провер типа, ммм, даже не знаю как получше написать в общем если в строке параметр look равен нулю, то он не отображается в выподающем списке и второе условие если min > выбранных количестве недель (переменная nedel), то nedel = min если была бы одна строка, то проблем не было б, а как перебором все это проверять не знаю может есть какой-то более простой способ все это оформить, напрмиер табличку перестроить или еще что-то |
Фак мой моск из-за кодировки, но я сделал, по крайней мере начал http://kursy001.jcase.ru/
Посмотри так же консоль - все переменные есть. Потом, когда предварительная подготовка закончена, можно дать юзеру селекты и уже смотреть что он там навыбирал. Код смотреть тут http://kursy001.jcase.ru/index.txt я отойду на часок, потом отвечу на вопросы, если не будет что понятно |
Serg, пасиб огромное щас буду разбираться.
Пока появился небольшой вопрос при быстром прочтении как определяется с какой до какой строки брать данные по курсам и тоже самое по проживанию |
не понял вопроса
|
я имел ввиду
в таблицу к примеру курсы идут в строках 1-20 проживание в строках 25-50 напрмиер как скрипту ссобается что именно в этих строках проживание а в этих курсы |
Axios,
дык он скрипт сам всё забирает, единственное условие - начать надо с первой строки, а потом сделать несколько пустых строк. Там "фореч", т.е. "пока не кончится" Но с одной оговоркой, что строка будет считаться пустой, если в первой ячейки строки пусто, т.е. даже не пробел, а именно пусто (это можно доработать, защиту от нерадивых заполнителей) |
Чет я не въеду как там все это дело работает.
Парни может кто согласится написать такой калькулятор за $$ |
Часовой пояс GMT +3, время: 11:43. |