从文本文件中读取多行固定宽度记录

时间:2012-02-23 11:03:42

标签: c# import

我需要读取一个充满记录的文本文件。在前两行中有一个包含多个字段的标题,然后列出记录。每条记录包含三行。每个记录都包含固定长度的字段。我想用字段填充dataTable。

例如,文件可能如下所示:

header1 0101 2012
header2 0202 0000
rec10 abc 
rec11 def
rec12 ghi
rec20 jkl
rec21 mno
rec22 pqr

对于每个领域,我都有这个领域的开始和长度。

我尝试使用StreamReader和子字符串,它正在工作,但它很笨拙。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

使用FileHelpers library,您的示例可以解析如下:

声明一个表示对象的类:

[IgnoreFirst(2)]
[FixedLengthRecord(FixedMode.ExactLength)]
public sealed class Record
{
    [FieldTrim(TrimMode.Right)]
    [FieldFixedLength(6)]
    public String Header1;


    [FieldFixedLength(3)]
    public String Data1;

    [FieldInNewLine()]
    [FieldTrim(TrimMode.Right)]
    [FieldFixedLength(6)]
    public String Header2;

    [FieldFixedLength(3)]
    public String Data2;

    [FieldInNewLine()]
    [FieldTrim(TrimMode.Right)]
    [FieldFixedLength(6)]
    public String Header3;

    [FieldFixedLength(3)]
    public String Data3;
}

从文件中加载数据,如下所示:

FileHelperEngine<Record> engine = new FileHelperEngine<Record>();

engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;

DataTable records = engine.ReadFileAsDT(@"myTextFile.txt");

if (engine.ErrorManager.ErrorCount > 0)
    engine.ErrorManager.SaveErrors("Errors.txt");

答案 1 :(得分:0)

虽然一些C#纯粹主义者会不愿意这个想法,但你可以包含VB.NET程序集并使用它的TextFieldParser class。在使用固定字段文本文件时,它非常方便,您不会重新发明轮子。您仍然需要实现用于检测和处理多行记录的代码,但字段解析很容易。