【问题标题】:PHP - Convert Tab Delimited TXT file to CSVPHP - 将制表符分隔的 TXT 文件转换为 CSV
【发布时间】:2016-08-07 02:34:31
【问题描述】:

我正在尝试将制表符分隔的 .txt 文件转换为 .csv 文件。

我能够使用 fgetcsv() 打开 txt 文件并使用以下代码获取每一行的数据:

$handle = fopen("fileurl.com", "r");
$row = 1;
if (($handle = fopen("fileurl.com", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;

        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }

        print_r($data);

    }
    fclose($handle);
}

现在我只需要从数据数组创建一个 csv 文件。我试过使用 fputcsv(),但没有任何运气。我试过这样的东西,但它创建的 csv 文件不正确,只有 1 行:

$fp = fopen('file.csv', 'w');

fputcsv($fp, $data, "\t");

fclose($fp);

如何从 $data 数组创建 .csv 文件的示例会很棒。我花了很多时间研究并试图弄清楚这一点,但一直无法让它发挥作用。

【问题讨论】:

    标签: php csv


    【解决方案1】:

    fputcsv() 一次只写一行。不是整个文件。您需要遍历 $data 才能将所有数据添加到您的 CSV 文件中。

    $fp = fopen('file.csv', 'w');
    foreach ($data as $line) {
        fputcsv($fp, $line);
    }
    fclose($fp);
    

    使用您的代码的完整示例:

    $handle = fopen("fileurl.com", "r");
    $lines = [];
    if (($handle = fopen("fileurl.com", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
            $lines[] = $data;
        }
        fclose($handle);
    }
    $fp = fopen('file.csv', 'w');
    foreach ($lines as $line) {
        fputcsv($fp, $line);
    }
    fclose($fp);
    

    【讨论】:

    • 感谢您的回答。我试过这个并得到以下错误:警告:fputcsv()期望参数2是数组,给定字符串
    • 我更新了我的答案,您以您的代码为例。您没有将数据放入此工作所需的数组中。
    • 得到警告:在这一行为 foreach() 提供的参数无效 $fp = fopen('file.csv', 'w');
    • $data 更改为$lines
    • 连同它 $attachment = mb_convert_encoding($attachment, 'UTF-8', $parts[$i]->parameters[0]->value); tsv 到 csv 也需要。它会将文件类型更改为 text/plain
    【解决方案2】:

    这是将数据写入csv文件的正确方法

        <?php
    
    $list = array (
        array('aaa', 'bbb', 'ccc', 'dddd'),
        array('123', '456', '789'),
        array('"aaa"', '"bbb"')
    );
    
    $fp = fopen('file.csv', 'w');
    
    foreach ($list as $fields) {
        fputcsv($fp, $fields);
    }
    
    fclose($fp);
    ?>
    

    在 fputcsv 中,我们使用第二个参数作为数组。

    【讨论】:

      【解决方案3】:

      随之而来的是 $attachment = mb_convert_encoding($attachment, 'UTF-8', $parts[$i]->parameters[0]->value); tsv 到 csv 也需要。它会将文件类型更改为文本/纯文本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多