0

我在将 txt 文件导入数据库时​​没有什么问题。文件的结构有点困难。第一行只有如下描述:

  • 典型假人
  • 状态就绪
  • 3号等等。

在描述(20 到 22 行之间)之后是一个表格,如下所示:

PartStatus    Result  Measurement1      Measurement2      .....
900           OK      0                 20                .....
600           Passed  30                400               .....

我不知道,表格从哪一行开始。读取和处理文件以将其写入数据库的最佳方法是什么?

目前我使用 StreamReader 并将每个字符串添加到数据表中。

问候

阿明

样本文件: 测试文件

4

3 回答 3

1

您可以使用TextFiledParser类并跳过无效行。

using (var reader = new TextFieldParser(@"c:\YourFile"))
{
    reader.TextFieldType = FieldType.Delimited;
    reader.Delimiters = new string[] {","};
    string[] currentRow = null;
    while (!reader.EndOfData)
    {
        try
        {
            currentRow = reader.ReadFields();
            // do something with the values
        }
        catch (MalformedLineException ex)
        {
            // skip invalid lines and handle it
        }
    }
}
于 2012-08-07T07:53:49.897 回答
1

试试这个:文件助手。我过去曾涉足过它,这可能会简化读取 CSV 的过程。

于 2012-08-07T07:47:26.107 回答
1

Codeplex 上的CommonLibrary.NET项目中也有专门的 CSV 解析支持。您可以在此处找到使用此库进行 CSV 解析的示例。

更新

下面是一些代码,可用于解析与上面类似的文本,并使用CommonLibrary.NET。注意,原文首先被截取到表头(origText.Substring(origText.IndexOf("PartStatus")))处,正则表达式匹配用于将一个或多个连续的空格字符替换为单个逗号(Regex.Replace(sometext, "[ ]+", ",")):

var origText =
    "Type Dummy\n" +
    "Status Ready\n" +
    "# Comment line\n" +
    "# Another comment line\n" +
    "PartStatus    Result  Measurement1      Measurement2\n" +
    "900           OK      0                 20\n" +
    "600           Passed  30                400\n";

var trimmedText = 
    Regex.Replace(origText.Substring(origText.IndexOf("PartStatus")), 
                  "[ ]+", ",");

var csvDoc = Csv.LoadText(trimmedText, true, false, ",");

Console.WriteLine(csvDoc.Get<int>(1, "Measurement2"));
Console.WriteLine(csvDoc.Get<string>(0, "Result"));

将产生输出:

400
OK

CommonLibrary.NET的 CSV 解析组件还提供了一种将 CSV 数据转换为ADO.NET DataTable的简单方法:

var table = csvDoc.ToDataTable();
于 2012-08-07T08:00:49.860 回答