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 的每一行中插入这些数据。有办法吗?如果我只能得到 de $value 那也可以。

编辑

它不是 CSV,而是另一个系统创建的 TXT,我无法控制它。

4

2 回答 2

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 回答
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 回答