我刚刚发现了令人惊叹的FileHelpers库。 (过去我已经基于属性开发了自己的导入/导出库。)
我想知道是否存在固定记录为每个字段指定起始字符的可能性。
实施例: 输入文件
3232432GIANLUIGI
4234234MARIO
我只想从第8个字符输入名字(Gianluigi)。
我只是想阅读客户名称,而我没有忽略(特别是如果我们谈论绩效)。
我的真实案例是关于一条为未来实施保留记录位置的记录。
示例:
- 从1到100个真实字段
- 从101到150无字段 - 为将来实施保留的位置
- 从151到160个真实领域
- 从161到185,另一次没有字段 - 为将来的实施保留位置
- 从186到...... N实地。
我想避免创建假字段以便不读取任何内容(例如,从101到150和从161到185)。
对于每个FieldFixedLength属性,我想象一下开始位置。
答案 0 :(得分:2)
是的,那是完全可行的。有几种方法可以像我想要的那样手动完成:
[FixedLengthRecord(FixedMode.AllowVariableLength)]
public class Customer
{
[FieldFixedLength(8)]
[FieldValueDiscarded]
public int ignoredFieldOne;
[FieldTrim(TrimMode.Both)]
[FieldFixedLength(80)]
public String CustomerName;
// Skip fields 3 - 5
// field 3 (length 20)
// field 4 (length 5)
// field 5 (length 3)
[FieldFixedLength(28)]
[FieldValueDiscarded]
public string ignoredFieldsThreeThroughFive;
[FieldTrim(TrimMode.Both)]
[FieldFixedLength(20)]
public String AnotherField;
}
或者,您可能更容易使用FileHelpers附带的类向导,您可以在其中选择您希望类内置的语言。
Customer
2
1
CustomerID
,输入为int
,长度为{{ 1}} 8
,将输入保留为CustomerName
,将长度设置为最大值(例如string
})和修剪到80
(或Both
如果你想在开头有空格。)此时,右侧将是您刚刚建立的课程。这正是我手动输入的内容,因为我已经知道如何构建这些类。
注1: FixedMode 设置为Right
表示所有记录的长度必须相同
注2:类构建器会自动使您的类密封,因此无法为性能目的进行继承。
注3:对于您不感兴趣的任何位置,您必须创建一个字段,但是如上所述添加属性并且不会填充它(参见上面跳过三个字段的内容)因为它们是连续的,但只创建了一个字段)