[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как узнать последнюю строку файла?
Страницы: 1, 2
Bolik
Привет,

вопрос может и нубский, но я никак не придумаю как решить задачку...

допустим читаем файл по строкам


$lastBatch = false;
$handle = fopen($file, "r");
$i=0;
while ($line = fgets($handle)) {
$batch[] = trim($line);
$i++;
if ($i==10) {
//action
$i=0;
unset($batch);
$batch = array();
}
}

if(!empty($batch)) {
//action
$lastBatch = true;
}


т.е. мне нужно через каждые десять строк выпонить определенное действие с массивом. проблема заключается в том, что когда мы доходим до конца файла, нужно поместить в массиве метку, что это последний пакет.
если в файле количество строк не кратное 10, то мой скрипт сработает отлично, а если кратное, то нет. feof тут тоже не поможет.
как тут быть? как узнать, что это последний пакет? file() не предлагать, файлы монут быть очень большими.

спасибо!
Valick
Цитата (Bolik @ 30.11.2015 - 16:53)
feof тут тоже не поможет

как так то?

_____________
Стимулятор ~yoomoney - 41001303250491
Bolik
feof в цикле while вернет false
Valick
а должен что вернуть?

_____________
Стимулятор ~yoomoney - 41001303250491
Bolik
а мне нужно в цикле как-то узнать, что это последняя строка
Valick
для того что бы узнать о конце файла, существует функция feof()

_____________
Стимулятор ~yoomoney - 41001303250491
depp
если файл очень большой, то определяй сперва его размер.
потом прочитай 1000-2000 байт от конца файла. и определи последнюю строку.
там со сдвигом можно.
Valick
depp, фак перефак, чем тебе то feof() не угодил?


_____________
Стимулятор ~yoomoney - 41001303250491
Bolik
Valick покажи пожалуйста, если не в лом, как в моем случае поможет feof.
Valick
Bolik, вы в какой валюте предпочитаете платить? smile.gif
200р и будет вам готовый код, да еще и с блокировкой файла, о которой вы кстати не побеспокоились. Хороший кстати стимул подумать самому, и мне барыге не платить biggrin.gif


_____________
Стимулятор ~yoomoney - 41001303250491
Bolik
Цитата
Bolik, вы в какой валюте предпочитаете платить? smile.gif


))) все ясно. зачем мне блокировка файла, вопрос был только о данном конкретном примере. остальное я уж как-то напишу.

решение кстати я придумал только что по наводке depp за что ему спасибо.

$batches = (filesize($file)/кол-во байт в строке)/размер пакета;

а там уже дело техники.

с feof вопрос открыт smile.gif
waldicom
Valick, а ты не профессор, случайно? Причем я в прямом смысле спрашиваю. Может ученая степень или диссертацию защитил?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Valick
waldicom, давай рассуждать логически. Вот если я до этого момента ни о чем подобном не говорил, с чего ты взял, что я прям таки сегодня расколюсь? smile.gif

ну всё больше не могу молчать, конечно же я профессор

а вот так я провожу всё свободное время biggrin.gif
http://www.youtube.com/watch?v=EmY5CV3ksTY

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Bolik, а так?

$handle = fopen($file, "r");
$batch=array();
$i=0;
do {
$line = fgets($handle));
if( !$line ) {
if( !empty($batch) ) {
// action
}
continue;
}
$batch[] = trim($line);
$i++;
if ($i==10) {
//action
$i=0;
unset($batch);
$batch = array();
}
}
while( $line );



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
waldicom
Цитата (Valick @ 30.11.2015 - 20:42)
Вот если я до этого момента ни о чем подобном не говорил, с чего ты взял, что я прям таки сегодня расколюсь?

Все когда происходит в первый раз.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.