2011-07-11 14 views
2

私は本質的に.datファイルを持っています。区切られたファイルと私はタブ区切り.txtに変換しようとしています。私が気づいていない問題は、新しいファイルの各行が元のファイルの行の3つの組み合わせになり、元の行のそれぞれが異なる量のデータを持つということです。最初の列は、グループ化の各行を識別するだけです。これを行う最善の方法は何でしょうか?PHP .datファイルの解析

サンプル元データ:

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 

任意のアイデア?

+0

アイデア:構造化データを格納するデータベースを使用します。 –

答えて

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"; 
} 
+0

まさに私が必要としたもの。ありがとう。 – bmbaeb

0

は、私は個人的に、もう一度あなたの区切り文字で各ラインを爆発さ、結果の配列で、その後foreachの行データを爆発するでしょう。この

$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"; 
} 
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.