Парсинг csv(xls) таблицы + PHP

Автор sx88, 06 ноября 2014, 20:38:36

« назад - далее »

0 Пользователи и 3 гостей просматривают эту тему.

sx88

Доброго всем дня (или вечера :) ) Задачка для знатоков тривиальная, а для меня проблемная. Не прошу решения, прошу указать, что прочесть, куда посмотреть, чтобы "допетрить" до решения.

Имеется xls-таблица (excel'евский документ).
В ячейке А1 содержится номер позиции по счету : 48
В ячейке В1 содержится наименование изделия : табурет
В ячейке С1 его стоимость_1 : 150 рублей.
В ячейке D1 его стоимость_2 : 100 рублей.
В текстовом документе list.txt список изделий, стоимость_2 которых нужно передать в html документ.

Изначально конвертировал xls в csv.

48,Окрашеный табурет,"150","100"

Собственно куда дальше копать?

smallNix

php не подойдёт? Яваскрипт, вроде бы не может работать с файлами (я так понимаю файл на сервере).
Кто-то же должен что-то делать...

sx88

Цитата: smallNix от 08 ноября 2014, 13:20:17php не подойдёт?
Подойдет и PHP, но он в принципе не знаком.

smallNix

#3
посмотри книжки колисниченко - они устарели, но не сильно. Работа с файлами вряд ли изменилась. Там кажется что-то прям для csv было описано. А вообще можно так:

<?
echo <<<_END
<!DOCTYPE HTML>
<meta charset="utf-8">
<html>
<head>
<title></title>
</head>
<body>

_END;

$srcMass = file ("./1.csv");
for ($i = 0; $i < count ($srcMass); $i++) {
$row = $srcMass[$i]; // < знак "[" нельзя отделять от имени массива пробелом :(
echo "Print row $i: $row";
echo "<br />";
$cellMass = explode(",", $row);
for ($j = 0; $j < count($cellMass); $j++) {
  $cellValue = $cellMass[$j];
  echo "Value in row $i, cell $j: $cellValue ";
  echo "<br />";
}
}
echo "</body></html>";
?>



Не забудь поставить php. Поднять Apache.
Этот код сохранить в файл 1.php, положить в папку /var/www/php (сначала её надо создать). Файл 1.csv положить рядом. Установить права 755 для всех фалов и в браузере набрать адрес:
localhost/php/1.php
Кто-то же должен что-то делать...

sx88

Благодарю за подсказку.
Хотел вообще посоветоваться с Вами. По всей видимости, javascript для моих целей не самое лучшее решение(извините, что голову морочил), поскольку мне надо раз в сутки взять из CSV документа данные и передать_в_html/отредактировать_html.
Как считаете, perl или php подойдет для этих целей? Мне видится, что perl-скрипт обрабатывает данные и редактирует html. А cron раз в 24 часа лишь запускает скрипт.
Php или javascript будут выполнять эту функцию только при обновлении страницы или же каждый раз, когда страница будет обновлена.
Я правильно понимаю? Что посоветуете?

smallNix

#5
 Javascript - алгоритм, который передаётся браузеру пользователя и последним выполняется. Т.о. не стоит на него перекладывать задачу обновления данных на сервере, потому что скрипт работает на компьютере пользователя, а не на сервере, где лежат все данные.
Перекладывать задачу на cron... Теоретически можно, но это моветон :) Провайдер может вам и не дать запускать свои скрипты, потому как они потенциально опасны для сервера и процессор кушает. Для этих целей нужно использовать PHP. Он работает на сервере, позволяет генерировать страницы "на лету" по требованию пользователя. Т.е. не надо иметь фиксированные страницы html на сервере, которые потом надо аккуратно править. Гораздо правильнее написать файл php. Когда файл php будет запрошен пользователем, php-интерпритатор сервера "сгенерирует" html код, руководствуясь инструкциями php файла и передаст данные браузеру пользователя, который их отобразит. (Не совсем точно, но что-бы приблизительно понимать суть).
Рассмотрим пример: Есть на сервере файл boiler.csv, который администратор раз в день обновляет. Пишем простой файл php, который создаёт html-страницу, в которую заносит третью строку файла. И всё! Достаточно раз в день загружать на сервер новый файл boiler.csv
Чего не умеет php и зачем может пригодится javascript? Ответ простой - когда надо интерактивности - подсветка кнопки, счётчик времени, автоматическое обновление контента уже загруженной страницы (как в чатах), тогда без javascript никак, потому как php страницу сгенерировал и успокоился, если его не "дёрнуть", то новых данных он не выдаст. Сейчас часть интерактивности перекладывается на CSS, но CSS может тоже не всё и пока советую себе этим голову не забивать.
Кто-то же должен что-то делать...

smallNix

P.S.: Когда я говорю, что php "создаёт" html страницу я не имею в виду, что реально создаётся файл. Я имею в виду, что генерируется содержимое в HTML тегах, которое передаётся браузеру пользователя.
Кто-то же должен что-то делать...

sx88

Цитата: smallNix от 08 ноября 2014, 21:18:42Сейчас часть интерактивности перекладывается на CSS, но CSS может тоже не всё и пока советую себе этим голову не забивать.
smallNix, огромное спасибо за разъяснение вопроса и уделеное время. Все разложили по полочкам, ясно и понятно. Значит будем организовывать через PHP

sx88

#8
Цитата: smallNix от 08 ноября 2014, 21:18:42Пишем простой файл php, который создаёт html-страницу, в которую заносит третью строку файла
Как думаете, на сколько быстро будет происходить обработка если будет csv в 10-15 тысяч значений, среди которых нужно выбрать и обработать 20-30 штук?
Может, есть смысл из общего boiler.csv по средством скрипта удалить все лишнее, оставив необходимые значения?

smallNix

 Скорость зависит от способа построения алгоритма (для больших объёмов следует использовать бинарный поиск), от вычислительной мощности процессора. 20-30 тысяч - очень серьёзная цифра, не все серьёзные проекты работают с такими объёмами.  ;) Может пока стоит что-то поменьше перебирать? В любом случае надо попробовать, оценить результат и думать. Удаление сторонним процессом может дать прирост производительности, если приложение компилируемое. Если имеется в виду удаление по планировщику, то это мысль неплохая. В любом случае не стоит хранить записи, которые никогда не будут использоваться их надо просто удалять, что бы потом не тратить время на их анализ.
Кроме того, для больших объёмов стоит использовать БД. Там уже всё оптимизированно )))
Кто-то же должен что-то делать...