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

本文关键字:固定宽度 记录 读取 文本 文件 | 更新日期: 2023-09-27 18:25:28

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

例如,该文件可能看起来像:

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

对于每一块场地,我都有场地的起点和长度。

我试过使用StreamReader和子字符串,它很有效,但非常糟糕。

有更好的方法吗?

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

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

声明一个类来表示您的对象:

[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");

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