Php 从CSV文件中删除行并自动生成新文件
我正在尝试用PHP操作现有的.csv文件!我浏览了大多数StackOverflow问题,发现哪一个最适合我的需要 我设置了Php 从CSV文件中删除行并自动生成新文件,php,fgetcsv,fputcsv,Php,Fgetcsv,Fputcsv,我正在尝试用PHP操作现有的.csv文件!我浏览了大多数StackOverflow问题,发现哪一个最适合我的需要 我设置了$id=2,因此我希望代码会影响.csv文件中的第2行,并且会生成一个新生成的没有第2行的.csv文件 这是我的密码: $id=2; $fptemp = fopen('files/FL_insurance_small-temp.csv', "a+"); if (($handle = fopen('files/FL_insurance_small.csv', "r")) !==
$id=2
,因此我希望代码会影响.csv文件中的第2行,并且会生成一个新生成的没有第2行的.csv文件
这是我的密码:
$id=2;
$fptemp = fopen('files/FL_insurance_small-temp.csv', "a+");
if (($handle = fopen('files/FL_insurance_small.csv', "r")) !== FALSE) {
while (($id= fgetcsv($handle)) !== FALSE) {
if ($id != $data[0]) {
$list = array($data);
fputcsv($fptemp, $list);
}
}
fclose($handle);
fclose($fptemp);
rename('files/FL_insurance_small-temp.csv','files/output/FL_insurance_small_new.csv');
echo "Row with ID: ".$id." successfully deleted!";
} else {
print "There seems to be a problem.";
}
由于在输出文件夹中生成了一个新文件,所以一切似乎都正常工作。我的问题是,新生成的文件是空的。有人知道为什么吗?我错过了什么
示例数据(.csv):
读取文件时-您正在覆盖的
$id
是您要查找的行。相反,您的循环应该将值分配给$data
$rowcount = 1;
while ($data= fgetcsv($handle)) {
if ($id != $rowcount++) {
fputcsv($fptemp, $data);
}
}
$rowCount
是当前正在读取的行,因此在读取中的新行时,会将其与每行进行比较
这也将删除对$list
的冗余分配
要“删除”(或ommit)记录列表
$id= [2,5,7];
$rowcount = 1;
while ($data= fgetcsv($handle)) {
if (!in_array($rowcount++, $id)) { // Only write row if not in the list
fputcsv($fptemp, $data);
}
}
读取文件时-您正在覆盖的
$id
是您要查找的行。相反,您的循环应该将值分配给$data
$rowcount = 1;
while ($data= fgetcsv($handle)) {
if ($id != $rowcount++) {
fputcsv($fptemp, $data);
}
}
$rowCount
是当前正在读取的行,因此在读取中的新行时,会将其与每行进行比较
这也将删除对$list
的冗余分配
要“删除”(或ommit)记录列表
$id= [2,5,7];
$rowcount = 1;
while ($data= fgetcsv($handle)) {
if (!in_array($rowcount++, $id)) { // Only write row if not in the list
fputcsv($fptemp, $data);
}
}
$data
在哪里定义?谢谢Patrick。这似乎是问题所在,你是对的。您能告诉我如何更改代码以便定义$data吗?我被我发布的代码绊住了。我不能告诉你,因为我不确定你打算$data
做什么。也许你的意思是$data=fgetcsv($handle)
?为什么要用PHP开发一个应用程序来完成这样的任务?您确实不想将平面文件用作数据库。如果是一次性的,文本编辑器或一行shell脚本会更快、更容易调试。@symcbean我有500多个.csv文件,其中第3-8行应该删除。每个文件都是相同的。因此,在我看来,一个简单的php脚本应该是最快的方式。可能有更好的方法,但PHP实际上是我所知道的编程语言。:)$data
在哪里定义?谢谢Patrick。这似乎是问题所在,你是对的。您能告诉我如何更改代码以便定义$data吗?我被我发布的代码绊住了。我不能告诉你,因为我不确定你打算$data
做什么。也许你的意思是$data=fgetcsv($handle)
?为什么要用PHP开发一个应用程序来完成这样的任务?您确实不想将平面文件用作数据库。如果是一次性的,文本编辑器或一行shell脚本会更快、更容易调试。@symcbean我有500多个.csv文件,其中第3-8行应该删除。每个文件都是相同的。因此,在我看来,一个简单的php脚本应该是最快的方式。可能有更好的方法,但PHP实际上是我所知道的编程语言。:)谢谢你的回答。您更新的代码似乎正常工作,因为在新创建的文件中插入了来自已编辑的.csv文件的数据。现在的问题是,代码没有任何效果。我收到消息“ID为2的行已成功删除!”,但在新文件中,第2行仍然存在。“你知道为什么吗?”克里斯托弗。请把样本数据直接放到你的问题中(不是链接)。哦,好的。我不想删除具有特定ID的行。我想从文件中删除第二行。因此$id不应该是id,而应该是文件中的行。如果我输入$id=234,脚本将从.csv文件中删除第234行。这就是我想要做的。太棒了。正是我想要的。非常感谢你,奈杰尔。我会把你的答案标为正确答案。最后一个问题:是否可以一次删除多行?如果是这样,你能告诉我我的代码应该是什么样子吗。例如:我想从.csv文件中删除第3,4,5,6,7,8,9行。你有主意吗?@ChristophC。只是一个小问题,你实际上并没有删除这些行。您正在将它们从写入新文件的内容中删除。谢谢您的回答。您更新的代码似乎正常工作,因为在新创建的文件中插入了来自已编辑的.csv文件的数据。现在的问题是,代码没有任何效果。我收到消息“ID为2的行已成功删除!”,但在新文件中,第2行仍然存在。“你知道为什么吗?”克里斯托弗。请把样本数据直接放到你的问题中(不是链接)。哦,好的。我不想删除具有特定ID的行。我想从文件中删除第二行。因此$id不应该是id,而应该是文件中的行。如果我输入$id=234,脚本将从.csv文件中删除第234行。这就是我想要做的。太棒了。正是我想要的。非常感谢你,奈杰尔。我会把你的答案标为正确答案。最后一个问题:是否可以一次删除多行?如果是这样,你能告诉我我的代码应该是什么样子吗。例如:我想从.csv文件中删除第3,4,5,6,7,8,9行。你有主意吗?@ChristophC。只是一个小问题,你实际上并没有删除这些行。您正在从写入新文件的内容中忽略它们。