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


Read CVS file and ouput the CSV file to .txt file

嗨,我正在读取一个 CSV 文件,我正在尝试将 CSV 文件数据写入.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);
}

正在创建新文件.txt并且只有 CSV 文件中的最后一条记录显示在新文件.txt中。谁能告诉我为什么 CSV 中的所有内容都没有显示在我的新文件中.txt(仅显示最后一条记录)。谢谢

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

$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);
}

使用a+参数而不是w打开文件以进行fopen

在文档中,模式"w"打开仅用于写入

,而模式"a+"打开用于读取和写入,并将文件指针放在文件末尾。如果该文件不存在,它将尝试创建它。

$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);
}
  1. 您在每次循环迭代中打开文件,这不是一个好主意,请尝试将其放在循环上方
  2. 在 fopen 引用中使用 a+ 模式而不是 w
这可能是

因为每次写入记录并覆盖其内容时都会重新打开文本文件。要么在追加模式下打开文件(无法告诉你如何,我不是 php 程序员),要么只打开一次你的文本文件并在一个会话中写入几次。

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