【问题标题】:PHP export csv file with a particular lines endingPHP 导出以特定行结尾的 csv 文件
【发布时间】:2014-07-11 21:54:46
【问题描述】:

我有一个 csv 文件,我使用以下代码读取并保存为输出文件:

CSV 内容:

10038,"Service, Inc.",loten,4u@att.net,9951,xxx,6321
10041,Roadsi deInc.,Kgel,gel1980@gmail.com,1101,xxx,7967
10042,Rang LLC,Resgers,resranger85@yahoo.com,2073,4611,xxx


<?php
    $csv_filename = "output.csv";
    $fp = fopen($csv_filename, "w");
    if (($handle = fopen(__DIR__.'/test.csv', "r")) !== FALSE && $fp) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $data_row = array(
                    $data[0],
                    $data[1],
                    $data[2],
                    $data[3],
                    $data[4],
                    $data[5]
            );
            fputcsv($fp, $data_row, "|");
        }
    }
    fclose($handle);
    fclose($fp);

我得到的结果如下:

10038|"Service, Inc."|loten|4u@att.net|9951|xxx
10041|"Roadsi deInc."|Kgel|gel1980@gmail.com|1101|xxx
10042|"Rang LLC"|Resgers|resranger85@yahoo.com|2073|4611

当字符串中有空格时,如何删除 fputcsv 函数添加的引号,以及如何在 csv 输出的每一行中添加 0d0a 结尾?

【问题讨论】:

  • RTFM? php.net/fgetcsv 您可以使用一些选项来列出分隔符和包围字符。
  • 如果我阅读了它,如果我有解决方案,我不会在这里问
  • 您实际上应该阅读php.net/manual/en/function.fputcsv.php,因为您想更改默认外壳。您的答案就在顶部。
  • 我确实添加了以下内容:while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE) { 但引号仍在输出文件中
  • 以 0d0a 结尾的行呢?

标签: php csv


【解决方案1】:

引号由fputcsv添加,试试fputsjoin

<?php
    $csv_filename = "output.csv";
    $fp = fopen($csv_filename, "w");
    if (($handle = fopen(__DIR__.'/test.csv', "r")) !== FALSE && $fp) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $data_row = array(
                    $data[0],
                    $data[1],
                    $data[2],
                    $data[3],
                    $data[4],
                    $data[5]
            );
            fputs($fp, join("|", $data_row)."\r\n";
        }
    }
    fclose($handle);
    fclose($fp);

【讨论】:

  • 对不起,我得到了一个破旧的结果:只有一行 10038|"Service, Inc."|loten|4u@att.net|9951|xxx|" ,最后添加的报价我也不得不放: fputcsv($fp, $data_row, "|", '"');否则 fput 显示错误
  • 已更新,使用 fputs 和 join 代替 fputcsv。
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多