Обработка (парсинг) типовой выгрузки с интернет-банка

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

Сделаем чуть по другому - см. комментарии

Код:
<?php
$lines = file('Export_to_1c.txt');
$writedoc=false; // метка начала записи
$splitter='###'; //разделитель
$documents=array();
foreach ($lines as $line_num => $line) {
$line=trim($line); // уберем переносы строк
$line = iconv('windows-1251', 'UTF-8', $line);

if (strpos(' '.$line, 'Номер=')) { //Если строка содержит метку начала документа - то ставим метку начала записи в тру
   $writedoc=true;
   $tmpdoc='';
   }

if ($writedoc) {
   $tmpdoc.=$line.$splitter; //пишем документ в строку
    }

if (strpos(' '.$line, 'КонецДокумента')) { //Ставим метку начала записи в false
   $writedoc=false;
   $rawdocuments[]=$tmpdoc; //Сбрасываем документ в массив
   }
}

print_r($rawdocuments); //выводим массив с документами в одной строке

foreach ($rawdocuments as $key=>$value)
{
$documents[$key] = explode($splitter, $value);
}
print_r($documents); //массив документов
?>

Конечно можно было сделать элегантнее - сразу раскидывать в массивы по меткам, но я решил уже текущий код доработать, т.к. он работал.
 
Назад
Сверху