7

test_tab.txt(タブ区切り)というファイルに次のものがあります。

header1 header2 header3
field1  field1a field1b; field1c
field2  field2a field2b
field3  field3a 
field4  field4a field4b; field4c; field4d; field4e
field5  field5a 
field6  field6a field6b; field6c

それを次のように変換したいと思います(これもタブで区切られ、別のテキストファイルに書き込まれます):

header1 header2 header3
field1  field1a field1b
field1  field1a field1c
field2  field2a field2b
field3  field3a 
field4  field4a field4b
field4  field4a field4c
field4  field4a field4d
field4  field4a field4e
field5  field5a 
field6  field6a field6c
field6  field6a field6c

私は一般的にプログラミングに慣れていませんが、グーグルで調べてみましたが、これを行うには、配列を作成し、何らかの方法で header3 キーと値のペアを分解することが考えられます。ただし、header1 と header2 の下のフィールドをコピーする方法がわかりません。

現時点で持っているのは、配列を作成するためのコードだけです。

$mainarray = array(); 
foreach (file('test_tab.txt') as $row) { 
  list($header1, $header2, $header3) = explode("\t", $row); 
  $mainarray[] = array(header1 => $header1, header2 => $header2, header3 => $header3); 
} 

print_r($mainarray);

与える:

    Array
    (
        [0] => Array
            (
                [header1] => header1
                [header2] => header2
                [header3] => header3

            )

        [1] => Array
            (
                [header1] => field1
                [header2] => field1a
                [header3] => field1b; field1c

            )

        [2] => Array
            (
                [header1] => field2
                [header2] => field2a
                [header3] => field2b

            )

        [3] => Array
            (
                [header1] => field3
                [header2] => field3a
                [header3] => 

            )

        [4] => Array
            (
                [header1] => field4
                [header2] => field4a
                [header3] => field4b; field4c; field4d; field4e

            )

        [5] => Array
            (
                [header1] => field5
                [header2] => field5a
                [header3] => 

            )

        [6] => Array
            (
                [header1] => field6
                [header2] => field6a
                [header3] => field6b; field6c
            )

    )

これにアプローチする方法についてのアイデアはありますか? PHP バージョン 5.3.10 を使用しています。

4

2 に答える 2

8

これを試して:

// read input file
$fp = fopen( 'test_tab.txt', 'r' );

// write to an output file
$fp1 = fopen( 'output.txt', 'w' );

while( ( $data = fgetcsv( $fp, '', "\t" ) ) !== FALSE ) {
    $list = explode( ';', $data[ 2 ] );

    foreach( $list as $column ) {
        fwrite( $fp1, '"' . $data[ 0 ] . "\"\t\"" . $data[ 1 ] . "\"\t\"" . trim( $column ) . "\"\n" );
    }
}

fclose( $fp1 );
fclose( $fp );

お役に立てれば。

于 2013-07-04T09:48:43.307 に答える
3

テキストはタブで区切ってから、これを試してください。

<?php $mainarray = array(); 
foreach (file('test_tab.txt') as $row) { 
  $ar = explode("\t", $row); 
  $mainarray[] = array('header1' => $ar[0], 'header2' => $ar[1], 'header3' => $ar[2]); 
} 

var_dump($mainarray);?>
于 2013-07-04T09:41:45.513 に答える