从文本文件中读取多行固定宽度记录
本文关键字:固定宽度 记录 读取 文本 文件 | 更新日期: 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类。当涉及到处理固定字段文本文件时,它非常方便,而且您不会重新发明轮子。您仍然需要实现用于检测和处理多行记录的代码,但字段解析很容易。