dongtuji0992 2012-05-08 05:47
浏览 45
已采纳

为什么代码无法更新csv中的内容?

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

  • 写回答

1条回答 默认 最新

  • doupao6011 2012-05-08 06:04
    关注

    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");
           }
       }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)