1

有 50 个 csv 文件。每个 csv 文件都有相同的列名。列中的某些内容是相同的,有些则不是。

eg:test1.csv,  example1.csv, hello.csv,  world.csv.......test70.csv. 

现在,我想更改两列的内容。

a,所有 csv 文件都有一个名为qty. 其行内容都是0. 现在,我想把它改成888

b,所有 csv 文件都有一个名为img. 其行内容都是

 upload/img1.jpg
 upload/img2.jpg
 upload/img3.jpg
 upload/img01.jpg
 upload/img14.jpg
 upload/img01.jpg
.......

如果我打开每个 csv 文件,然后进行搜索和替换。我太无聊了。

先感谢您。

csv文件如下:

http://phplist.xxmn.com/csv.jpg

我想Upload在图片列中删除,在数量列中将 0 更改为 888。

我使用该文件change.php来更新记录。编码:

<?php
$dir    = getcwd();
$files = array_diff(scandir($dir), array('..', '.','change.php'));
foreach ($files as $file) {
    if (($handle = fopen($file, "r")) !== FALSE) {
        $new_content = '';
        while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
            //var_dump($data);
           $data[2]=888; 
            $new_content .= implode(',', $data);
            //var_dump($new_content);
        }
       file_put_contents($file, $new_content);
        echo 'down';
    }
}

?>

该代码不起作用如何更正它。感谢你

.csv 文件。 http://phplist.xxmn.com/women.csv

4

3 回答 3

2

最好的方法是将 csv 文件导入 mysql 中的某个表,使用更新查询进行所需的更改并将其导出回 csv。你不需要为 php 代码头疼 :)

于 2012-05-07T08:39:52.933 回答
0

尝试循环所有文件并在此循环内,所有行的另一个循环。修改您的栏目,编写新内容,您就完成了!

使用这个 PHP 函数读取 CSV 文件:fgetcsv()

foreach ($files as $file) {
    if (($handle = fopen($file, "r")) !== FALSE) {
        $new_content = '';
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            if ($new_content != '') { // Skip 1st line (headers)
                $data[1] = 888; // qty columns is the second columns => index is 1
            }
            $new_content .= implode(',', $data) . "\r\n";
        }
        file_put_contents($file, $new_content);
    }
}
于 2012-05-07T10:09:49.243 回答
0

下面是确切的解决方案(假设您的 php 和 mysql 驻留在同一台服务器上)

假设您的 csv 文件是

"1";"Desserts";"1";"category/vcm_s_kf_repr_806x645_7.jpg"
"2";"Beverages";"1";"category/aagya.jpg"
"3";"apetizers";"1";"category/Koala.jpg"
"13";"Breakfasts";"1";"category/Lighthouse_2.jpg"
"5";"Vegeterian entries";"1";"category/Desert.jpg"
"6";"Naan and Breads";"1";"category/Lighthouse_1.jpg"
"7";"Mexican";"1";"category/vcm_s_kf_repr_832x624_2.jpg"

假设您有 001.csv、002.csv 等文件,使一张表与 csv 文件中的字段完全相同

CREATE TABLE  `sample` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 100 ) NOT NULL ,
`flag` INT NOT NULL ,
`path` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY (  `id` ) ,
UNIQUE (
`id`
 )

然后根据您的自定义运行下面的代码

mysql_connect("localhost","root","");
mysql_select_db("csv");
//find the current working f=directory
$dir=getcwd();
foreach (glob("*.csv") as $key=>$val) {
    echo $sql="LOAD DATA INFILE '".$dir."//".$val."' INTO TABLE sample";
    //now fire your update query , as an example here i am trying to replace all jpg with gif 
    mysql_query($sql) or die(mysql_error());
    echo $update="UPDATE sample SET path=REPLACE( path, '.jpg', ',bmp' )";
    mysql_query($update);
    //delete the table for next csv
    echo $outfile="SELECT * INTO OUTFILE '" .$dir."/converted_".$val."' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
              LINES TERMINATED BY '\n'
              FROM sample";
    mysql_query($outfile);
    $del="delete from smaple";
    mysql_query($del);

}
于 2012-05-07T10:44:06.580 回答