我正在编写一个程序,每行用逗号分隔符解析.txt文件。代码在C#中。文件是.txt
,db是mssql。
通常的顺序是
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而有些行在第二个模式中是第三个或仅在1个txt文件中是第三个。我无法确定在解析每一列时必须使用哪些代码,并通过索引将其放在我的对象中,如下面的代码所示:
AirData aData= new AirData();
aData.dateAir = txtParse[0]
aData.timeStart = txtParse[1]
aData.timeEnd = txtParse[2]
aData.duration = txtParse[3] ...etc.
所以我的问题是,处理这种情况的最佳方法是什么?文本文件交给我已经由某台机器生成,我无法纠正它。我的工作是解析它并将其存储在数据库中,以便我可以为它生成报告。
我的想法是将它放在try catch中,每次抛出异常时,如果抛出另一个异常,它将尝试执行第二个模式或第三个模式。这样好吗?或任何建议?
更新:
一些实际数据。 这里的列是我上面的样本的差异因为我只是快捷方式。
模式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 -ALSO有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
答案 0 :(得分:0)
你可以使用一些正则表达式&在解析文件时测试每个字段。
案例2很容易被发现,因为它只有4列,而不是5列。案例1&如果不知道time_aired_end
&格式是什么格式,很难分辨出来。 duration_aired
在(例如01:30是1小时30分钟,1分30秒,凌晨1点30分,或者凌晨1点30分)