Intereting Posts
Отправить личное сообщение для IRC Загрузочная разбивка страниц с использованием PHP и MySQL отображать дату / время на базе сайта на компьютерном времени пользователя в разных странах Какое лучшее решение для проверки страны-пользователя? выбор совпадений в соответствии с длиной символа строк в строках Как отправлять и извлекать данные из веб-службы с помощью PHP и Android компоновщик автозагрузчиков psr-0 Выбор чередующихся записей из двух таблиц как отправить запрос xml с помощью мыла в php? Composer не получает установленные окна 7 Получение ошибок «Команды не синхронизированы, вы не можете запустить команду сейчас» при выполнении хранимой процедуры в mysql / PHP Почему var_dump возвращает большее значение, чем длина строки? Как вставить PHP-код в таблицу в базе данных? CakePHP 3 ручная установка PDO – вызов функции-члена функции fetch () для объекта без объекта

PHP Анализ файла .dat

У меня есть .dat файл, который по существу; и я пытаюсь преобразовать его в файл с разделителями с табуляцией. Проблема, о которой я не уверен, заключается в том, что каждая строка нового файла будет представлять собой комбинацию из 3 строк исходного файла, каждая исходная строка имеет различное количество данных. Первый столбец просто идентифицирует каждую строку в группе. Какой был бы лучший способ сделать это?

Пример исходных данных:

01;zxc;asd;qwe;uio;jkl;asd;123;456 02;lkj;oiu;oji 03;fjifao;vbofekjf;fjieofk;aoijf;voien3984 01;lkj;oiu;fji;eoj;vnk;fji;098;321 02;fji;oje;jvi 03;jie;voi;djv;eojf;38723 

Конечный вывод:

 zxc asd qwe uio jkl asd 123 456 lkj oiu oji fjifao vbofekjf fjieofk aoijf voien3984 lkj oiu fji eoj vnk fji 098 321 fji oje jvi jie voi djv eojf 38723 

Есть идеи?

Вот как я это сделаю:

 $lines = file($data); $rows = array(); $row_pivot = -1; foreach ($lines as $line) { // Split line by ; $data = explode(';', trim($line)); // Get the first element $r_id = array_shift($data); if ($r_id == '01') { // When 01 is the first element, start a new row // You can dump the previous row here as well if you aim for speed $row_pivot++; $rows[$row_pivot] = array(); } // Add data to row $rows[$row_pivot] = array_merge($rows[$row_pivot], $data); } // Print rows foreach ($rows as $r) { echo implode("\t", $r)."\n"; } 

Я бы лично взорвал данные, затем запустил строку в результирующем массиве, а затем снова взорвал каждую строку на вашем разделителе ';' а затем отформатируйте вывод с разделителем табуляции.

 <?php $data = 'LOADED FILE DATA'; $lines = preg_split( '/\r\n|\r|\n/', $data); $out = ''; foreach($lines as $line){ $parts = explode(';',$line); foreach($parts as $part){ $out .= $part.'\t'; } $out .= '\n'; } echo $out; ?> code untested. 

Должно быть что-то вроде этого

 $lines = file($filename); $lineCount = count($lines); $output = ''; for ($i = 0; $i < $lineCount - 2; $i += 3) { $newLines = array(); for ($j = $i; $j < $i + 3; $j++) { list($_, $rest) = explode(';', isset($lines[$j]) ? $lines[$j] : ''); $newLines = array_merge($newLines, $rest); } $output .= implode("\t", $newLines) . "\n"; }