我必须阅读破烂的正确文件,是否可以使用文件助手库读取它们
我的代码是这样的
[FixedLengthRecord()]
class File_load
{
[FieldFixedLength(10)]
[FieldTrim(TrimMode.Right)]
public string proj_name;
[FieldFixedLength(30)]
[FieldTrim(TrimMode.Right)]
public string iso;
[FieldFixedLength(50)]
[FieldTrim(TrimMode.Right)]
public string line;
[FieldFixedLength(50)]
[FieldTrim(TrimMode.Right)]
public string pid;
}
如果我不对最后一列使用FieldFixedLength,则会引发异常
未处理的异常:FileHelpers.BadUsageException:标记为FixedLengthRecord属性的记录类在每个字段中都必须包含FixedLength属性。
您可以使用属性的FixedMode.AllowLessChars
参数处理方案FixedLengthRecord
。
这是一个工作程序(我将您的字段长度更改为2)。
[FixedLengthRecord(FixedMode.AllowLessChars)]
class File_load
{
[FieldFixedLength(2)]
[FieldTrim(TrimMode.Right)]
public string proj_name;
[FieldFixedLength(2)]
[FieldTrim(TrimMode.Right)]
public string iso;
[FieldFixedLength(2)]
[FieldTrim(TrimMode.Right)]
public string line;
[FieldFixedLength(1000)]
[FieldTrim(TrimMode.Right)]
public string pid;
}
class Program
{
static void Main(string[] args)
{
var engine = new FileHelperEngine<File_load>();
var records = engine.ReadString(
"112233444444" + Environment.NewLine +
"1122334"
);
var firstRecord = records[0];
Assert.AreEqual("11", firstRecord.proj_name);
Assert.AreEqual("22", firstRecord.iso);
Assert.AreEqual("33", firstRecord.line);
Assert.AreEqual("444444", firstRecord.pid);
var secondRecord = records[1];
Assert.AreEqual("11", secondRecord.proj_name);
Assert.AreEqual("22", secondRecord.iso);
Assert.AreEqual("33", secondRecord.line);
Assert.AreEqual("4", secondRecord.pid);
Console.Read();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句