2

私は本質的に;である.datファイルを持っています。区切られたファイルで、タブで区切られた.txtに変換しようとしています。私がよくわからない問題は、新しいファイルの各行が元のファイルの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

何か案は?

4

3 に答える 3

1

これが私がそれをする方法です:

$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";
}
于 2011-07-11T22:32:01.340 に答える
0

このようなものでなければなりません

$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";
}
于 2011-07-11T22:08:02.220 に答える
0

私は個人的にデータを分解し、次に結果の配列の各行を分解し、次に区切り文字';'で各行を再び分解します。次に、タブ区切りの出力をフォーマットします。

<?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.
于 2011-07-11T22:09:49.927 に答える