2013-04-09 41 views
0

我正在寫一個程序,每行用逗號分隔符分析.txt文件。代碼是用C#編寫的。文件是.txt,db是mssql。使用差異模式序列處理CSV的最佳方法是什麼?

通常的順序是

date_aired, 
time_aired_start, 
time_aired_end, 
duration_aired, 
movie_name but 

發現了一些行顯示此序列

date_aired, 
time_aired_start, 
duration_aired, 
movie_name. 

這是沒有問題的,因爲我可以只通過持續增加time_aired_start得到time_aired_end但再次發現有另一個這樣的序列

date_aired, 
time_aired_start, 
date_aired, 
time_aired_end, 
movie_name 

我的意思是某些行在第一種模式下是wiritng,而有些行在第二種模式中,或者在一個txt文件中是第三種。沒有辦法,我能確定我有解析每列使用,並把它放在我的目的是通過指數如下面的代碼代碼:

AirData aData= new AirData(); 
aData.dateAir = txtParse[0] 
aData.timeStart = txtParse[1] 
aData.timeEnd = txtParse[2] 
aData.duration = txtParse[3] ...etc. 

所以我的問題是,什麼是處理這些的最佳途徑情況?文本文件已交給我已經由某臺機器生成,我無法更正它。我的工作是解析它並將其存儲在數據庫中,以便爲其生成報告。

我的想法是把它放在try catch中,每次拋出一個異常,它會嘗試執行第二個模式或第三個,如果拋出另一個異常。這很好嗎?或任何建議?

更新:

一些實際的數據。 這裏的列是從我上面的示例差異我只是快捷方式。

PATTERN 1:11個字段

01/01/2013, 
00:00:00;00, 
00:00:54;19, 
00:00:54:20, 
01/01/2013, 
00:00:00;00, 
00:00:54;19, 
00:00:54:20, 
Seg 4 HAPPY NEW YEAR WISHES.mp4, 
Aired, 
5D189F06-886D-40B1-AC70-609C2CA5E774 

圖案2:9個字段 - 這可以很容易地發現,因爲我可以只檢查,如果數組的長度更小於11

01/28/2013, 
21:38:23;11, 
00:01:00:04, 
01/28/2013,21:38:23;11, 
00:01:00:04, 
ADXEFRF2-0243.mov, 
Aired, 
9E74C08C-8E30-48A1-A743-44ACC93E183E 

但這裏的問題我有:

模式3 - 還有11個字段但順序不同。

01/28/2013, 
21:39:23;15, 
00:08:03:01, 
01/28/2013, 
21:39:23;15, 
01/28/2013, 
21:47:26;13, 
00:08:03:01, 
THE IMPOSTOR With Eng Subs Ep 11-5.mp4, 
Aired, 
895F4F16-5624-4A2C-A5E0-D3BF1BA57B86 
+1

文本文件是否有可動態用於確定列順序的標題? – Kane 2013-04-09 10:58:24

+0

使用異常作爲流量控制被認爲是不好的做法,所以你應該找到另一種方法。 – 2013-04-09 11:01:22

+0

你可以使用某種模式匹配來決定3種格式嗎?你能以這些格式顯示一些實際的數據嗎? – 2013-04-09 11:04:18

回答

0

你可以使用一些正規表達式&測試每個字段爲您解析該文件。

情況2被容易發現因爲它僅具有4個列,而不是5.案例1 & 3是難以分辨不知道什麼格式time_aired_end & duration_aired是在(例如是01:30在1小時30分鐘,1分鐘30秒,過去1分鐘30分鐘或過去1點30分鐘)

相關問題