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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как разбить текстовый файл?
 
 автор: polaxlex   (05.04.2006 в 08:13)   письмо автору
 
 

Есть текстовый файл: 14000 строк

Нужно вырезать часть строк до определенной строки и записать в другой файл.

Строки примерно такие:
AAAB=AAAA=МОСКВА=1=ПЕР. 1-ЫЙ СПАСОНАЛИВКОВСКИЙ, 18, СТР.1=(095) 238-59-59, 238-59-70=-=9:30-17:00=CLOSED=CLOSED=1.00=50000.00
Разделитель: =

Нужно прочитать файл, если встречается END, то все, что до END вставить в другой файл.

Если кто может помочь, буду очень рад.

   
 
 автор: 10100100   (05.04.2006 в 08:17)   письмо автору
 
   для: polaxlex   (05.04.2006 в 08:13)
 

у, да это Вам в другой раздел форума - в Рег. Выраения.

   
 
 автор: TrunK   (05.04.2006 в 08:27)   письмо автору
 
   для: polaxlex   (05.04.2006 в 08:13)
 

Ну моё предложение:
Открываем файл функцией file. Ну и начинаем построчно сравнивать с end. Если не равно, то сразу же пишем эту строчку в другой файл.

$File = file("data1.txt");  //файл с которого считываем
$File_data = fopen("data2", "r+"); //файл в который надо записать
for ($i=0; $i < count($File); $i++)

  if ($File[$i] != "END") 
  { 
    fputs($File_data,$File[$i]);
  }
  else
  { 
  break;
  }
}

   
 
 автор: polaxlex   (05.04.2006 в 10:56)   письмо автору
 
   для: TrunK   (05.04.2006 в 08:27)
 

работает, только этот скрипт все содержимое файла перекидывает в новый файл.

   
 
 автор: Trianon   (05.04.2006 в 11:00)   письмо автору
 
   для: polaxlex   (05.04.2006 в 10:56)
 

А файл очень большой?

   
 
 автор: polaxlex   (05.04.2006 в 11:07)   письмо автору
 
   для: Trianon   (05.04.2006 в 11:00)
 

да 14700 строк, 1370 kb.

   
 
 автор: Trianon   (05.04.2006 в 11:11)   письмо автору
 
   для: polaxlex   (05.04.2006 в 11:07)
 

Можете привести фрагмент из нескольких строк, среди которых есть этот признак конца текста END ?
Желательно аттачем.

   
 
 автор: polaxlex   (05.04.2006 в 11:17)   письмо автору
 
   для: Trianon   (05.04.2006 в 11:11)
 

ZSFN=INTL=ЗЕСТАФОНИ=1=УЛ. АГМАШЕНЕБЕЛИ, 17=(995392) 5-63-87=-=10:00-18:00=10:00-15:00=CLOSE=1.00=50000.00
ZUGA=GPBN=ЗУГДИДИ=0=УЛ. Ц.ДАДИАНИ, 5=(995315) 2-16-71=-=10:00-17:00=10:00-14:00=CLOSE=1.00=50000.00
ZUGD=GPBN=ЗУГДИДИ=0=УЛ. РУСТАВЕЛИ, 94=(995315) 5-00-08, 5-08-08=-=9:30-17:00=CLOSED=CLOSED=1.00=50000.00
ZUMT=ESAV=UMTATA=0=8 YORK ROAD=+27 11 880 4171=-=8:00-17:00=CLOSED=CLOSED=1.00=9500.00
ZWIN=ESVN=WINDHOEK=0=53 TAL STREET, CNR STUBEL STREET=+264 61 246 986=-=8:00-17:00=8:00-11:00=CLOSED=1.00=9500.00
END
DIRECTIONS
AAAA=ПРОМБАНК=ПРОМБАНК=RUS=1
AABA=ДЕЛОВОЙ НАКОПИТЕЛЬНЫЙ БАНК=ДЕЛОВОЙ НАКОПИТЕЛЬНЫЙ БАНК=RUS=0
AACA=FINCOMBANK=FINCOMBANK=MDA=1

   
 
 автор: Trianon   (05.04.2006 в 11:27)   письмо автору
 
   для: polaxlex   (05.04.2006 в 11:17)
 


<?
$fin 
fopen("data.txt""r");  // input 
$fout fopen("data2.txt""w"); // output
while(!feof($fin))
{
    
$s fgets($fin);
    if(
$s == "END\n")
        break;
    
fputs($fout$s);
}
fclose($fin);
fclose($fout);
?>

   
 
 автор: polaxlex   (06.04.2006 в 14:45)   письмо автору
 
   для: Trianon   (05.04.2006 в 11:27)
 

"END\n" не распознается.

сделал через счетчик:

$counter=0;
while(!feof($fin))
{
$s = fgets($fin);
$counter++;

if ($counter == 11713){
break;
}else{
fputs($fout, $s);
}
}
берет из файла строки до 11713 строки, перекидывает в другой файл, но мне нужно еще чтобы дальше читал строки с 11715 до 13067 строки записывал в другой файл.

Делаю так:
$counter=0;
while(!feof($fin))
{
$s = fgets($fin);
$counter++;

if ($counter == 11713){
break;
}else{
fputs($fout, $s);
}
if (($counter<11715) & ($counter == 13067)) {
break;
}else{
fputs($fout1, $s);
}
}
Может кто подскажет в чем ошибка.

   
 
 автор: Trianon   (06.04.2006 в 14:56)   письмо автору
 
   для: polaxlex   (06.04.2006 в 14:45)
 

>"END\n"
" не распознается.
А если написать

if($s == "END\n" || $s == "END\r\n")
    break;

Это позволит обрабатывать тексты независимо от ос(unix или windows) .

Если не получится - можете попробовать отправить мне файл на e-mail, я погляжу, что там за кошмар с символами.

   
Rambler's Top100
вверх

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