Именно сразу прочитать, не расходуя лишних памяти и времени, а не прочитать все в массив, а затем отсеять нужное.
Спустя 6 минут, 33 секунды (1.03.2011 - 15:45) linker написал(а):
Конечно, в цикле.
fopen()
while(){}
fclose()
Спустя 29 минут, 24 секунды (1.03.2011 - 16:14) LRCenter написал(а):
linker
Не понял. Как передать номер строки в fgets() внутри цикла?
У этой функции нет такого параметра.
В документации есть пример, но там прочитываются все строки до конца файла:
Не понял. Как передать номер строки в fgets() внутри цикла?
У этой функции нет такого параметра.
В документации есть пример, но там прочитываются все строки до конца файла:
$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
Спустя 3 минуты, 49 секунд (1.03.2011 - 16:18) Snus написал(а):
LRCenter
А ты логически подумай. Ты сможешь узнать сколько конфет в коробке, не открыв ее и не подсчитав кол-во? Ответ - нет. Тут ситуация такая же.
А ты логически подумай. Ты сможешь узнать сколько конфет в коробке, не открыв ее и не подсчитав кол-во? Ответ - нет. Тут ситуация такая же.
Спустя 2 минуты, 34 секунды (1.03.2011 - 16:21) T1grOK написал(а):
Может на коробке написано, сколько в ней конфет.
Спустя 2 минуты, 35 секунд (1.03.2011 - 16:23) LRCenter написал(а):
Snus
И я так думаю.
Вроде очень четко вопрос сформулировал, linker что ли меня неправильно понял, раз написал что возможно.
Хотя, может знает какое-нибудь решение. Подождем его.
И я так думаю.
Вроде очень четко вопрос сформулировал, linker что ли меня неправильно понял, раз написал что возможно.
Хотя, может знает какое-нибудь решение. Подождем его.
Спустя 55 секунд (1.03.2011 - 16:24) LRCenter написал(а):
T1grOK
А если я запрашиваю конфету которой нет, может вернется пустой запрос или false. Почему нет?
А если я запрашиваю конфету которой нет, может вернется пустой запрос или false. Почему нет?
Спустя 1 минута, 34 секунды (1.03.2011 - 16:26) Snus написал(а):
T1grOK
Даже если написано, сунуть туда вслепую руку и вытащить конфеты под номером 1, 2 и 3 будет тяжело )
Даже если написано, сунуть туда вслепую руку и вытащить конфеты под номером 1, 2 и 3 будет тяжело )
Спустя 6 минут, 16 секунд (1.03.2011 - 16:32) LRCenter написал(а):
Snus
Вообще-то да, разделитель строк пренадлежит к концу старой строки а не к началу новой, чтоб определить начало новой строки нужно прочитать предидущую всю до конца
Вообще-то да, разделитель строк пренадлежит к концу старой строки а не к началу новой, чтоб определить начало новой строки нужно прочитать предидущую всю до конца
Спустя 1 минута, 29 секунд (1.03.2011 - 16:34) linker написал(а):
LRCenter
Snus тебе правильно аналогию сказал. Открой матчасть и почитай что такое файл. Набор байтов. Ну не понимает файл такого понятия как строки. Ты сам должен считать.
Snus тебе правильно аналогию сказал. Открой матчасть и почитай что такое файл. Набор байтов. Ну не понимает файл такого понятия как строки. Ты сам должен считать.
$handler = fopen('file.txt', 'r');
$start = 100;
$end = 150;
$position = 0;
while (!feof($handler))
{
$str = fgets($handler, 4096);
if ($position >= $start && $position <= $end)
echo $str;
++ $position;
}
fclose($handler);
Спустя 1 минута, 55 секунд (1.03.2011 - 16:36) Snus написал(а):
linker
++ $position; ? = $position++; ?
++ $position; ? = $position++; ?
Спустя 37 секунд (1.03.2011 - 16:36) linker написал(а):
++ $position работает быстрее
Спустя 1 минута, 24 секунды (1.03.2011 - 16:38) Snus написал(а):
linker
Надо устроить тест
Надо устроить тест
Спустя 1 минута, 56 секунд (1.03.2011 - 16:40) linker написал(а):
Snus
Не надо это факт. ++ $position сразу будет инкремент, $position ++ только на следующем шаге интерпретации, а это лишнее затрачиваемое время.
Не надо это факт. ++ $position сразу будет инкремент, $position ++ только на следующем шаге интерпретации, а это лишнее затрачиваемое время.
Спустя 2 минуты, 17 секунд (1.03.2011 - 16:42) Snus написал(а):
linker
Я уже проверил. ++ $val в 2 раза быстрее $val++ ! Не знал, не буду лукавить
Я уже проверил. ++ $val в 2 раза быстрее $val++ ! Не знал, не буду лукавить
Спустя 1 минута, 46 секунд (1.03.2011 - 16:44) linker написал(а):
Snus
проверяльщик заядлый
проверяльщик заядлый
Спустя 43 секунды (1.03.2011 - 16:44) Snus написал(а):
linker
Доверяй, но проверяй!
Доверяй, но проверяй!
Спустя 12 минут, 12 секунд (1.03.2011 - 16:56) LRCenter написал(а):
Это уличная магия какая-то, честное слово!
Так и жду что linker скажет мне в следующий раз: "вытащи у себя из-за шиворота учебник по php с моим автографом" ))
Настолько просто и эффективно! Замерил на здоровом файле в 10 метров расход памяти копеечный по сравнению с перекладыванием в массив.
linker
Блин, моё почтение!
Переписать строку в файле с такой же эффективностью, конечно-же из области фантастики?
Так и жду что linker скажет мне в следующий раз: "вытащи у себя из-за шиворота учебник по php с моим автографом" ))
Настолько просто и эффективно! Замерил на здоровом файле в 10 метров расход памяти копеечный по сравнению с перекладыванием в массив.
linker
Блин, моё почтение!
Переписать строку в файле с такой же эффективностью, конечно-же из области фантастики?
Спустя 6 минут, 12 секунд (1.03.2011 - 17:03) linker написал(а):
Ну я бы не сказал, что из области фантастики, но жонглирование временными файлами обеспечено (если не хочешь расходовать память).
Спустя 9 минут, 45 секунд (1.03.2011 - 17:12) LRCenter написал(а):
В смысле, "слив" двух диапазонов строк(с игнорированием перезаписываемой строки) в два отдельных файла, затем дозапись нужной строки к первому, потом второго сверху и переименование с удалением оригинала?
Спустя 7 минут, 33 секунды (1.03.2011 - 17:20) linker написал(а):
Да, как-то так.
Спустя 57 минут, 22 секунды (1.03.2011 - 18:17) LRCenter написал(а):
Спасибо, возьму на заметку.
Чтение заданного диапазона строк с конца файла реализовал так:
Рационально?
Чтение заданного диапазона строк с конца файла реализовал так:
$handler=fopen('test2.csv', 'r');
$conuter = 0;
while (!feof($handler)){
$str=fgets($handler);
++$conuter;}
fclose($handler);
$conuter--;
$handler=fopen('test2.csv', 'r');
$start = $conuter - 3;
$end = $conuter - 2;
$position = 0;
while(!feof($handler))
{
$str = fgets($handler);
if ($position >= $start && $position <= $end)
echo $str."<br><hr>";
++ $position;
}
fclose($handler);
Рационально?
Спустя 15 часов, 19 минут, 56 секунд (2.03.2011 - 09:37) linker написал(а):
Есть другой вариант, перелить с заменой в другой файл, а потом rename().
Спустя 1 минута, 24 секунды (2.03.2011 - 09:39) LRCenter написал(а):
linker
Это как, не понял?
Это как, не понял?
_____________
Меньше кода - меньше багов ©