2014-07-22 66 views
-1

我的任務是解析製表符分隔的文件並將值插入到數據庫中。在下面找到一個選項卡分隔文件。如何解析製表符分隔的文件到mysql數據庫

"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 =>從文本導入數據=>製表符分隔時,結果是完美的。但是我當然不能使用Excel,因爲數據每小時更新一次。請向正確的方向任何一點都非常感謝。

+1

使用[LOAD DATA INFILE](http://dev.mysql.com/doc/refman/5.6/en/load-data.html)if您可以。 – VMai

+2

用逗號或分號替換標籤,然後更輕鬆地解析它? – Bogdan

+0

我用TAAAB或SPAAACE替換標籤。然後可以方便地將其分解或預分割 –

回答

3

像VMai賽德隆,使用LOAD DATA INFILE

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

而且,我真的希望這些都不是實際的列名。

而不要依賴Excel作爲例子。至少從2007年起,它沒有以一種理智的方式處理CSV。

相關問題