|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|||||||||||
Построчное чтение файл csv09.07.2018, 06:51. Показов 6768. Ответов 6
Метки нет (Все метки)
Здравствуйте.
Направьте в правильную сторону. Есть файл весом в 400мб формат csv нужно построчно брать данные обрабатывать, и переходить к следующей строке. Загвоздка в том что на хостинге ограничение по времени выполнения скрипта. И есть желание сделать счетчик какая строка обработалась и при следующем запуске начать работу с того места где закончил. Использую тестовый файл на 315 строк, и такую конструкцию
Но если меняю конструкцию. На
В базе видно что выполнились только первые 100 строк, но цикл while крутится пока не закончится время на выполнения php скрипта, такое впечатление что добавления условия if просто заставляет цикл крутится вечно. Как это отследить и проверить в чем причина не пойму. Пытался другие методы, как прочитать файл в массив через file но тогда файл делится на массик в одной ячейки одна строка, проблема в том что в csv в ячейке может быть перенос строки, и file это не учитывает и массив в стиле csv уже не собрать. Где я глуплю, что мне читать ? Заранние спасибо.
0
|
|||||||||||
| 09.07.2018, 06:51 | |
|
Ответы с готовыми решениями:
6
Масивы и построчное чтение Построчное чтение файла+explode() |
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
||
| 09.07.2018, 11:22 | ||
|
И переделать на цикл for, сделав нормальное условие остановки при достижении 100 строк
0
|
||
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
||||||||||||
| 09.07.2018, 20:29 [ТС] | ||||||||||||
|
так вот если сделать цикл for где мы получить первые 100 значений все работает.
0
|
||||||||||||
|
259 / 193 / 50
Регистрация: 15.07.2016
Сообщений: 649
|
||||||||||||
| 09.07.2018, 22:23 | ||||||||||||
|
Как вариант, записывать куда-нибудь (хотя бы в файл) № обрабатываемой строки. А сам скрипт добавить в крон, где и проверять, насколько давно файл изменён.
Альтернативный вариант — обрабатывать заведомо небольшую (чтобы хватало времени) группу значений, после чего дёрнуть этот же скрипт по HTTP, передав в параметрах № строки. Вариант не особо хороший, но вполне рабочий.
Для корректной работы нужно сначала пропустить обработанные ранее строки. Быстрее всего это сделать с помощью позиционирования — см. команды ftell/fseek. В самом запущенном случае, можно сделать «в лоб»:
1
|
||||||||||||
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
| 09.07.2018, 22:58 | |
|
Rassol2, должно быть 2 условия останова цикла: достигнут конец файла или прочитано 100 строк. И при последующих чтениях файла нужно помнить, что чтение начинать нужно не с начала. Поэтому запоминать лучше не сколько строк, а сколько байт прочитано и предварительно перематывать файл (fseek и ftell)
1
|
|
|
87 / 48 / 24
Регистрация: 29.11.2016
Сообщений: 243
|
||||||
| 09.07.2018, 23:04 | ||||||
Идет дальше прогон строк без обработки. Или timeout или конец файла. Добавлено через 4 минуты Ссылка не идет. Текст Кликните здесь для просмотра всего текста
Для запуска скрипта на сервере с условно-бесконечным или просто большим временем выполнения надо так или иначе запускать его как консольный скрипт. Сервер - программа, которая не предназначена для того, чтобы один из ее воркеров выпла на условное навсегда, если парсер запускается в рамках обычного веб-запроса, то сервер вынужден делегировать один из своих потоков этому парсера, и ждать, когда он отработает (никогда). Если страница тридцать секунд не может вернуть ответ, значит, стоит вернуть ошибку ожидания пользователю. Вопрос не говорит о методе запуска скрипта, поэтому я на всякий уточнил.
Как запустить скрипт из консоли? Очень просто: подключиться к терминалу сервера и выполнить этот скрипт с помощью php: php script.php. В этом случае: Не убивается воркер веб-сервера и вообще не участвует внешняя оболочка скрипта По умолчанию max execution time неограничено Не нужно форматировать вывод как html, плюс можно логировать вывод средствами самой ОС. Это обеспечивает только одноразовый запуск скрипта, зато висеть он может хоть бесконечно. Как регулярно запускать скрипт? Как ответили выше - по крону (планировщику заданий). 99%, что на сервере установлен linux, а значит планировщиком является cron. Подробную документацию вы найдете в интернете, задания редактируются с помощью crontab -e или в панели хостера и представляют из себя время выполнения и команду, которую необходимо исполнить - точно такую же, как в примере выше. Таким образом cron поможет запускать скрипт каждые N минут или гарантировать его перезапуск в случае падения. Как убедиться, что скрипт отработал перед тем, как запускать его снова? Вот тут начинает прорастать филигранная работа. Проще всего оставлять некий .lock-файл при начале работы скрипта и затирать его в конце - в этом случае повторно запущенный скрипт проверит наличие файла, увидит его существование и откажется запускаться. Для того, чтобы избежать ситуаций, когда скрипт упал, а .lock-файл остался, можно записывать туда PID (идентификатор процесса). В этом случае повторно запущенный скрипт опрашивает ОС на предмет наличия процесса с таким PID, и если последний существует, то необходимо прекратить работу.
1
|
||||||
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
||||||
| 10.07.2018, 17:48 [ТС] | ||||||
|
Torovich,
Jewbacabra, koders, Спасибо вам за потраченное время. В особенности мня подтолкнул пост koders, поскольку это мелкий скрипт для своих задач то мне подойдет такой вариант.
1
|
||||||
| 10.07.2018, 17:48 | |
|
Помогаю со студенческими работами здесь
7
Построчное чтение текстового отчета msinfo32 Построчное чтение из файла до первой пустой строки Чтение csv-файла с кириллицей Чтение csv файла в массив
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|