需要建议解析不同的csv文件并保存到数据库

时间:2015-02-14 04:23:25

标签: c# parsing csv

对于你们中的一些人来说,这可能很简单,也许有点令人困惑,但是在这里。

我有三个不同的csv文件,由前一天的电话系统生成。 csv文件创建得不是很好。以下是文件中逗号分隔的值。

第一档: * For calls connected to agents. ** Including calls aborted and rejected.,Application Summary Analysis,1/15/2015 8:30:00 AM(-5:00),-,1/15/2015 9:00:00 PM(-5:00),Application Name,Called Number,CallsPresented,Flow-In,Flow-Out,CallsHandled,AvgSpeed ofAnswer*,AvgTalk Time*,Avg Work Time*,Calls Abandoned**,AvgAbandonTime,ABCD,12345,928,0,0,833,0:00:36,0:01:45,0:00:23,95,0:01:07,,,Report generated:,1/23/2015, 6:00:38PM,(30280),1 这是一条线。

第二个是: * Calls handled by workflow script or another CSQ.,Contact Service Queue Activity Report,1/15/2015 8:30:00 AM(-5:00),-,1/15/2015 9:00:00 PM(-5:00),CSQ Name (ID)(Call Skills),CallsPresented,Avg / MaxQueue Time,CallsHandled,Avg Speedof Answer,Avg / MaxHandle Time,CallsAbandoned,Avg / MaxTime toAbandon,Avg / MaxAbandonPer Day,CallsDequeued,Avg / MaxTime toDequeue,Calls Handledby Other *,Program1,435,0:00:37,422,0:00:37,0:02:18,13,0:01:06,6.50,0,0:00:00,0,Program1,0:06:46,0:12:01,0:06:18,13,0:00:00,,,Report generated:,1/23/2015, 6:00:37PM,(12345),1

但其他程序有三行类似的数据。

同样地,还有另一个csv文件,其格式与上面的格式类似,有三行用于三个不同的程序。

我需要解析这些文件并将其保存在数据库中。我知道这是创建不良的csv,但这就是思科生成它的方式。

我目前的工作方式是使用StreamReader读取文件,并将解析后的数据保存在IEnumerable中。然后我遍历列表并在指定位置提取数据并将其保存在类属性中。我为每个CSV文件类型创建了3个类,其属性类似于CSV文件中应该是标题的属性,并将提取的数据保存在属性中。然后使用DbContext将其保存在数据库中。有一个更好的方法吗?可以创建泛型类型然后保存提取的数据并保存吗?还是太模糊了?我在这方面不是很有经验,那么,有经验的程序员将如何解决这个问题呢?顺便说一下,我正在使用C#并存储在SQL Server 2008中

3 个答案:

答案 0 :(得分:0)

如果我没记错的话,SQL Server内置了一个非常强大的数据加载工具,但是自从我使用它以来已经有一段时间了。我建议调查一下。另外,你的最终目标是什么?这可能有所帮助。我看到你的技能集是sql server和c# - 这就是我在sql server中提到数据加载工具的原因。

答案 1 :(得分:0)

如果每行中的数据均匀(意味着每行具有相同的列)。像这样的东西

col1, col2, col3, col4
col1, col2, col3, col4
col1, col2, col3, col4

然后你可以使用这样的东西

BULK INSERT TableName FROM 'c:\mycsvfile.txt'
WITH   (  FIELDTERMINATOR = ',',   ROWTERMINATOR = '\n'   )

当然表TableName包含col1,col2,col3,col4(按顺序)。

答案 2 :(得分:0)

你可以在excel中编写一个宏来完成对头文件的预处理,然后它将在excel中并准备好导入到数据库中