我想删除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);
}
}
测试 CSV 文件http://phplist.xxmn.com/women.csv
这是因为.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");
}
}
}