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 回答