如何使用php编辑(替换会很好).csv文件中的一行?

时间:2015-01-22 20:33:42

标签: php csv fputcsv

所以我看了fputcsv,但它似乎取代了整个文件。有没有办法可以使用PHP替换或编辑CSV文件中的特定行?我不想上传(作为数组或其他数据结构)整个CSV编辑上传,然后替换或覆盖该文件。我想在适当的位置编辑CSV文件。

例如,如果我的example.csv看起来像:

Name  Amount Price
Chair 500    20.00
Boat  20     20000.00

我想将椅子的数量替换为100.如何通过编辑CSV文件来解决这个问题?我可以在不上传整个文件的情况下完成。我正在避免这种情况,因为我认为这将是一个相当大的文件,并且可能经常发生变化。

另外我说上传这个措辞可能很差,因为这都是在服务器端而不是客户端完成的。

2 个答案:

答案 0 :(得分:4)

我的选择:

$f="file.csv";

$file=file_get_contents($f);
$file = str_replace("Chair 500", "Chair 100", $file);


file_put_contents($f, $file);

“危险,威尔罗宾逊!”不要尝试使用大于可用内存的文件

答案 1 :(得分:1)

CSV,对于它包含“格式化”数据的所有内容,仍然只是一个平面文本文件。如果您在文件中替换的内容与其中的内容大小不同,例如你的10 - > 100,您必须重新编写文件以为额外字符腾出空间。你不能只找到10的位置并开始写作,因为这将开始覆盖10之后发生的任何事情,例如

foo;10;bar      <--original
foo;100bar      <--blind string replacement

现在它不再是3场CSV记录了。这是两场战绩。同样,对于10 - &gt; 2

foo;10;bar
foo;20;bar

10 - &gt; 2删除两个字符,在一个字符中写入,并保留原始的第二个字符。现在你把你的计数器翻了一倍,而不是减少它。

基本上你必须这样做:

1) open new temp file
2) copy records from original CSV until you reach the record you want
3) read record into client-side
4) decode record into native data structure
5) modify data
6) write modified record out as csv to temp file
7) copy the remainder of the original file
8) delete original
9) rename temp -> original