0

我正在编写一个程序,该程序用每行逗号分隔符解析 .txt 文件。代码在 C# 中。文件是 a .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

我的意思是有些行在第一个模式中写入,而有些行在第二个模式或第三个模式中,仅在 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 - 也有 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
4

1 回答 1

0

您可以在解析文件时使用一些正则表达式并测试每个字段。

案例 2 很容易被发现,因为它只有 4 列,而不是 5 列。案例 1 和 3 在不知道time_aired_end&格式的情况下很难区分duration_aired(例如,01:30 是 1 小时 30 分钟、1 分钟 30 秒、30 分钟凌晨 1 点过去,或下午 1 点过去 30 分钟)

于 2013-04-09T11:25:23.847 回答