2012-05-08 48 views
1

我想刪除Upload,並在qty列中更改0至888, 以下是我的代碼,它使得csv文件內容無序。如何糾正我的代碼。謝謝爲什麼代碼無法更新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

回答

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"); 
     } 
    } 
} 
+0

當我將1000更改爲0或4096.一個新的csv文件無法正常工作,您可以嘗試一下。 http://phplist.xxmn.com/women.csv – run

+0

phplist.xxmn.com/1.csv此csv文件也無法正常工作,千斤頂,你知道爲什麼嗎?非常感謝 – run

+0

更新了我的答案,可能適用於您的一些改進 –

相關問題