读取CSV文件并将CSV文件输出到.txt文件

时间:2014-11-17 13:29:35

标签: php csv

您好我在这里正在阅读CSV文件,我正在尝试将CS​​V文件数据写入.txt文件。

    $row = 1;
    if (($handle = fopen("data.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            echo "<p> $num fields in line $row: <br /></p>\n";
            $row++;
            for ($c=0; $c < $num; $c++) {
                $myfile = fopen("newfile.txt", "w") or die ("unable to open file");
                fwrite($myfile, $data[$c]);
            }
        }
        fclose($handle);
}

正在创建newfile.txt,并且只有CSV文件中的最后一条记录显示在newfile.txt中。任何人都可以告诉我为什么CSV中的所有内容都没有显示在我的newfile.txt中(只显示最后一条记录)。谢谢

4 个答案:

答案 0 :(得分:2)

您只需要打开一次新文件。

$row = 1;
if (($handle = fopen("data.csv", "r")) && $myfile = fopen("newfile.txt", "w")) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        fputcsv($myfile, $data);
    }
    fclose($handle);
    fclose($myfile);
}

答案 1 :(得分:1)

使用a+参数而不是w fopen打开您的文件。

the doc,模式&#39; w&#39;打开仅供写入,而模式&#39; a +&#39;打开以进行读写,并将文件指针放在文件末尾。如果该文件不存在,则会尝试创建该文件。

$row = 1;
if (($handle = fopen("data.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            $myfile = fopen("newfile.txt", "a+") or die ("unable to open file");
            fwrite($myfile, $data[$c]);
        }
    }
    fclose($handle);
}

答案 2 :(得分:1)

  1. 你正在每次循环迭代打开文件,这不是一个好主意,试着把它放在循环上面
  2. 在fopen reference
  3. 中使用 a + 模式而不是 w

答案 3 :(得分:1)

这可能是因为每次编写记录并覆盖其内容时都会重新打开文本文件。以附加模式打开文件(不能告诉你如何,我不是一个php程序员)或只打开你的文本文件一次,并在一个会话中写几次。

编辑:你应该使用'a'或'a +'而不是'w'作为fopen的参数,如下所述:http://php.net/manual/en/function.fopen.php