我需要读取一个充满记录的文本文件。在前两行中有一个包含多个字段的标题,然后列出记录。每条记录包含三行。每个记录都包含固定长度的字段。我想用字段填充dataTable。
例如,文件可能如下所示:
header1 0101 2012
header2 0202 0000
rec10 abc
rec11 def
rec12 ghi
rec20 jkl
rec21 mno
rec22 pqr
对于每个领域,我都有这个领域的开始和长度。
我尝试使用StreamReader和子字符串,它正在工作,但它很笨拙。
有更好的方法吗?
答案 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。在使用固定字段文本文件时,它非常方便,您不会重新发明轮子。您仍然需要实现用于检测和处理多行记录的代码,但字段解析很容易。