Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: вытащить определенную строку из файла

Сообщения:  [1-10]    [11-20]  [21-28] 

 
 автор: kaoz   (30.05.2006 в 14:46)   письмо автору
 
   для: Trianon   (30.05.2006 в 14:41)
 

вы меня поняли :)

крута, большое спасибо!!

   
 
 автор: Trianon   (30.05.2006 в 14:41)   письмо автору
 
   для: kaoz   (30.05.2006 в 14:39)
 

Недочитанная, а не недописанная. Да.

   
 
 автор: kaoz   (30.05.2006 в 14:39)   письмо автору
 
   для: Trianon   (30.05.2006 в 14:32)
 

т.е. недозаписанная строка попадает в следующий блок?

   
 
 автор: Trianon   (30.05.2006 в 14:32)   письмо автору
 
   для: kaoz   (30.05.2006 в 14:11)
 


<?php
$blk_factor 
40000;

$handle fopen($filename"r");   // открываем файл
$block '';  // при первом чтении в буфере предчтения пусто.
$sep "\n";  // строки в файле разделены символом LF
while (!feof($handle))  // пока не достигнем конца файла
{   // дописываем к буферу очередной большой блок макс.размером $blk_factor
    
$block .= fread($handle$blk_factor);
    
// разбиваем блок на строки и помещаем их в массив $lines
    
$lines explode($sep$block);
    
// вычисляем количество строк
    
$cnt count($lines);


    
$block $cnt <= 1     // если строка одна или ни одной, а также если
       
|| substr($block,-1,1) == $sep // последняя строка попала в буфер целиком
        
"" //то мы всё обработаем до конца, и буфер будет пуст.
        
:   $lines[--$cnt]; // иначе обрывок оставим в буфере, а число строк уменьшим
    
if($block != ""//
       
unset($lines[$cnt]); // и удалим обрывок из массива.



    
foreach($lines as $line)
       echo 
$line.'<br>';


}

   
 
 автор: kaoz   (30.05.2006 в 14:11)   письмо автору
 
   для: Trianon   (30.05.2006 в 14:01)
 

я что-то не понял как это работает...
вы не могли бы прокоментировать?

   
 
 автор: Trianon   (30.05.2006 в 14:01)   письмо автору
 
   для: kaoz   (30.05.2006 в 13:54)
 

Это делали те строки, которые Вы почему-то выбросили:


    $block = $cnt <= 1 || substr($block,-1,1) == $sep 
                 ? "" :   $lines[--$cnt]; 
    if($block != "") 
       unset($lines[$cnt]); 

   
 
 автор: kaoz   (30.05.2006 в 13:54)   письмо автору
 
   для: Trianon   (30.05.2006 в 13:47)
 

то что ничего не пропадает, понятно...

но вот как определять что это продолжение строки и как определить что в этом продолжении?

   
 
 автор: Trianon   (30.05.2006 в 13:47)   письмо автору
 
   для: kaoz   (30.05.2006 в 13:31)
 

Тот код тоже расчитан на переменную длину строки. То, что в примере были одинаковые строки, еще ни о чем не говорит. Я проверял код и на строках произвольной длины.
И начальная часть строки, недочитанной при предыдущем чтении, дописывается в начало буфера при последующем. Так что ничего не пропадает.

Как читать одной операцией конкретное количество строк произвольной длины, я, лично, не знаю. По-моему, это просто неосуществимо.

   
 
 автор: kaoz   (30.05.2006 в 13:31)   письмо автору
 
   для: Trianon   (30.05.2006 в 13:18)
 

по 100 не принципиально, можно в принципе сделать переменную где указывается сколько строк, хоть одна...

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

   
 
 автор: Trianon   (30.05.2006 в 13:18)   письмо автору
 
   для: kaoz   (30.05.2006 в 13:11)
 

А для Вас принципиально, чтобы именно по 100?
Код под ссылкой занимался именно этим.
Вытаскивал за раз много строк. Сколько поместилось.
Потом все эти строки обрабатывались иодним запросом уходили в базу.
Базе совсем не обязательно, чтобы в нее именно по 100 заливали. База не человек.

   

Сообщения:  [1-10]    [11-20]  [21-28] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования