1

50 個の csv ファイルがあります。各 csv ファイルには同じ列の名前があります。列の内容は同じものもあれば、そうでないものもあります。

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

今、私は 2 つの列の内容を変更したいと考えています。

a、すべてのcsvファイルには、という名前の列がありますqty。行の内容は all0です。今、私はそれをに変えたい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と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 ファイルとまったく同じフィールドを持つ 1 つのテーブルを作成します。

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 に答える
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 に答える