如何将制表符分隔的文件解析为mysql数据库

时间:2014-07-22 20:21:43

标签: php mysql parsing fgetcsv tab-delimited

我的任务是解析制表符分隔文件并将值插入数据库。在下面找到选项卡分隔文件的选择。

"030-36-2"      0   0   14  "P"
"030-38-2"      0   0   14  "S"
"030-40-2"      0   0   14  "S"
"031-2-2"       1   0       "O"
"031-3-2"       4   0       "O"
"032-36-26"     0   0   14  "S"
"032-38-26"     0   0   14  "S"
"032-40-26"     0   0   14  "S"
"070-140-161"   0   0   14  "S"
"070-140-162"   2   0       "D"
"070-83-161"    0   0   14  "S"

我使用fgetcsv并将分隔符设置为制表符(9),但在执行代码时,我只获得插入数据库的总值的一小部分。 这是我的代码:

if(($handle = fopen("mytabdelimitedfile.txt","r"))!==FALSE){
    fgetcsv($handle, 0,chr(9));
    while(($data = fgetcsv($handle,1000,chr(9)))!==FALSE){
        print_r($data[0]); 
        $result = mysql_query("INSERT INTO $table (col1,col2,col3,col4,col5) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')"); 
    }
}

未插入前4个记录,但它以" 031-3-2"开头,然后跳到" 070-140-162"。我担心结果可能与某些缺失的值有关,但我似乎无法辨别出一种模式。

有没有人对此有任何见解?该问题是否与某些值缺失有关?有没有解决方法? (我对源数据没有任何控制权)

另外注意:当我使用Excel =>从text =>导入数据制表符分隔,结果很完美。但当然我不能使用Excel,因为数据每小时更新一次。请,正确方向的任何一点都会非常感激。

1 个答案:

答案 0 :(得分:5)

与VMai saide一样,请使用LOAD DATA INFILE

LOAD DATA LOCAL INFILE 'mytabdelimitedfile.txt'
INTO TABLE table_name
FIELDS
  TERMINATED BY '\t'
  OPTIONALLY ENCLOSED BY '"'
(col1,col2,col3,col4,col5)

另外,我真的希望那些不是你的实际列名。

并且不要依赖Excel作为例子。至少自2007年以来,它一直没有以理智的方式处理CSV。