2012-05-08 6 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

あなたのために働くかもしれないいくつかの改善で私の答えを更新 –

関連する問題