i want to remove the Upload
, and change 0 to 888 in qty
column, the following is my code, it make the csv
file content disordered. how to correct my code. thank you
$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, ","))."
";
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)."
";
}
fclose($handle);
file_put_contents($file, $new_content);
}
}
the test csv file http://phplist.xxmn.com/women.csv
It's because the first line of your .csv file is more than 1000 characters. If you're not sure ahead of time how big each line can be I would suggest this:
$data = fgetcsv($handle, 0, ','); // >= PHP 5.0.4
Or
$data = fgetcsv($handle, 4096, ',');
The first option might slow down the processing, but it's probably going to be negligable.
You should also consider using fputcsv
to write the output.
$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");
}
}
}