TXT-File - 用c#拆分不同的内容

时间:2012-08-07 07:39:36

标签: c# split streamreader

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

  • Typ Dummy
  • 状态就绪
  • 3号 等等。

描述之后(20到22行之间)出现如下表格:

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

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

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

此致

阿明

SampleFile: TestFile

3 个答案:

答案 0 :(得分:1)

试试这个:File Helpers。我过去曾涉足过它,这可能会简化阅读CSV的过程。

答案 1 :(得分: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
        }
    }
}

答案 2 :(得分:1)

Codeplex上的CommonLibrary.NET项目中还提供专门的CSV解析支持。您可以使用此库here找到CSV解析的示例。

更新

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

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();