0

txt ファイルがあり、mysql データベースにアップロードする必要があります。だから私はphp.netでこのコードを見つけました:

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

出来た。「print_r」を指定すると、次のようになります。

PAGE:1
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00
PAGE:2
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00
PAGE:3
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00

今私の問題が来ます。他の例を見ましたが、実際に私の場合に使用できました。$key = $val の各行を次のように変換する必要があります。

[VALUE] => 200,00
[PROCESS DATE] =>31/12/2011

そして、あなたはそれがページであることに気付くでしょう、私はそれをこのようなものにするためにブレーキをかける必要があります

[0]
    [VALUE] => 200,00
    [PROCESS DATE] =>31/12/2011
[1]
    [VALUE] => 200,00
    [PROCESS DATE] =>31/12/2011

したがって、このデータを db の各行に挿入します。方法はありますか?$value のみを取得できれば、それも問題ありません。

編集

これは CSV ではなく、別のシステムが作成する TXT であり、私には制御できません。

4

2 に答える 2

0

これがコード スニペットの結果かどうかはわかりませんecho "<p> $num fields in line $row: <br /></p>\n";。また、区切り文字は「:」のようです (テキスト内のどこにも出現しないと仮定します)。とは言っても、これを試してみてください...

$row = 1;
$res = array();
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        $row++;
        $tmpArr = array();
        for ($c=0; $c < $num; $c++) {
            list($key, $val) = explode(":", $data[$c]);
            $tmpArr[$key] = $val;
        }
        $res[] = $tmpArr;
    }
    fclose($handle);
}
print_r($res);
于 2012-11-09T21:30:09.110 に答える
0

MySQL にロードしたいだけなら、LOAD DATA INFILE を調べましたか?

http://dev.mysql.com/doc/refman/5.5/en/load-data.html

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;
于 2012-11-09T21:38:04.163 に答える