读取一个csv并将其列写入另一个csv文件

时间:2019-05-17 20:49:33

标签: php file csv

我正在尝试从CSV文件中提取特定的列,并尝试将它们存储在另一个CSV文件中。我的CSV文件是用制表符分隔的,某些列的值在单独的行中。当我尝试在另一个文件中读取和写入它时,它会将它们视为不同的列,并在不同的行中写入它们。我希望输出文件与CSV文件中提供的信息相似。任何帮助,将不胜感激。

当我导入原始CSV文件时,有些列位于\n\r的不同行coz中。我尝试了多种方法,但是得到了相似的输出。 test.csv\t是标签页)中的内容:

"abc" \t "123" \t "Tom"

"xyz" \t 

"456" \t "Jack"

"mno" \t "789" 

\t "Jim"
$file1 = 'try.csv';
$fp=fopen($file1,'w');
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) 
    {
        $num = count($data);
        for ($c=0; $c < 2; $c++) 
        {
            echo $data[$c] . "<br />\n";
        fwrite($fp, $data[$c]);

        }
    fwrite($fp,"\n");
    }
    fclose($fp);
    fclose($handle);
}

我希望输出采用这种格式。

"abc" \t "123" 

"xyz" \t  "456"

"mno" \t  "789"

1 个答案:

答案 0 :(得分:0)

鉴于您提供的数据,这是我能做的最好的事情

$string = <<<CSV
"abc" \t "123" \t "Tom"
"xyz" \t
"456" \t "Jack"
"mno" \t "789"
\t "Jim"
CSV;

print_r(array_chunk(array_filter(array_map('trim',preg_split("/\t|\r\n|\n/", $string))), 3));

输出:

Array
(
    [0] => Array
        (
            [0] => "abc"
            [1] => "123"
            [2] => "Tom"
        )

    [1] => Array
        (
            [0] => "xyz"
            [1] => "456"
            [2] => "Jack"
        )

    [2] => Array
        (
            [0] => "mno"
            [1] => "789"
            [2] => "Jim"
        )

)

Sandbox

这不是魔术,而是代码!

PS。将$string替换为文件内容,并希望数据中没有标签。