我的任务是解析制表符分隔文件并将值插入数据库。在下面找到选项卡分隔文件的选择。
"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,因为数据每小时更新一次。请,正确方向的任何一点都会非常感激。
答案 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。