嗨,我正在读取一个 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
。
,而模式"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);
}
- 您在每次循环迭代中打开文件,这不是一个好主意,请尝试将其放在循环上方
- 在 fopen 引用中使用 a+ 模式而不是 w
这可能是
因为每次写入记录并覆盖其内容时都会重新打开文本文件。要么在追加模式下打开文件(无法告诉你如何,我不是 php 程序员),要么只打开一次你的文本文件并在一个会话中写入几次。
编辑:您应该使用"a"或"a+"而不是"w"作为fopen的参数,如下所述:http://php.net/manual/en/function.fopen.php