我想删除Upload
,并在qty
列中将0更改为888,
以下是我的代码,它使csv
文件内容混乱。如何纠正我的代码。谢谢
$dir = getcwd();
$files = scandir($dir);
foreach ($files as $file)
{
$parts = pathinfo($file);
if($parts['extension']!="csv") continue;
if (($handle = fopen($file, "r")) !== FALSE)
{
$new_content = implode(',', fgetcsv($handle, 1000, ","))."\n";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$data[12]=substr($data[12],9);
$data[13]=substr($data[13],9);
$data[14]=substr($data[14],9);
$data[42]=888;
$new_content .= implode(',', $data)."\n";
}
fclose($handle);
file_put_contents($file, $new_content);
}
}
答案 0 :(得分:1)
这是因为.csv文件的第一行超过1000个字符。如果你不能提前确定每条线的大小,我会建议:
$data = fgetcsv($handle, 0, ','); // >= PHP 5.0.4
或者
$data = fgetcsv($handle, 4096, ',');
第一个选项可能会减慢处理速度,但它可能是可以忽略的。
您还应该考虑使用fputcsv
来编写输出。
$dir = getcwd();
$files = scandir($dir);
foreach ($files as $file) {
$parts = pathinfo($file);
if ($parts['extension']!="csv") {
continue;
}
if (false === ($outfile = fopen("$file.tmp", "w"))) {
continue;
}
if (($handle = fopen($file, "r")) !== FALSE) {
fputcsv($outfile, fgetcsv($handle, 4096, ","));
while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
$data[12]=substr($data[12],9);
$data[13]=substr($data[13],9);
$data[14]=substr($data[14],9);
$data[42]=888;
fputcsv($outfile, $data);
}
fclose($handle);
fclose($outfile);
if (false === rename("$file.tmp", $file)) {
die("Could not rename temporary file");
}
}
}