固定字段开始位置

时间:2015-10-28 20:56:52

标签: filehelpers

我刚刚发现了令人惊叹的FileHelpers库。 (过去我已经基于属性开发了自己的导入/导出库。)

我想知道是否存在固定记录为每个字段指定起始字符的可能性。

实施例: 输入文件

3232432GIANLUIGI

4234234MARIO

我只想从第8个字符输入名字(Gianluigi)。

我只是想阅读客户名称,而我没有忽略(特别是如果我们谈论绩效)。

我的真实案例是关于一条为未来实施保留记录位置的记录。

示例:

- 从1到100个真实字段

- 从101到150无字段 - 为将来实施保留的位置

- 从151到160个真实领域

- 从161到185,另一次没有字段 - 为将来的实施保留位置

- 从186到...... N实地。

我想避免创建假字段以便不读取任何内容(例如,从101到150和从161到185)。

对于每个FieldFixedLength属性,我想象一下开始位置。

1 个答案:

答案 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附带的类向导,您可以在其中选择您希望类内置的语言。

  1. 将班级名称设为Customer
  2. 选择固定长度记录
  3. 根据需要设置 FixedMode
  4. 点击下一步
  5. 设置所需的字段数,例如2
  6. 如果您有标题行,请将忽略第一个设置为1
  7. 勾选忽略空行
  8. 点击下一步
  9. 在第一个框中,输入名称CustomerID输入int长度为{{ 1}}
  10. 在第二个框中,输入8,将输入保留为CustomerName,将长度设置为最大值(例如string })和修剪80(或Both如果你想在开头有空格。)
  11. 此时,右侧将是您刚刚建立的课程。这正是我手动输入的内容,因为我已经知道如何构建这些类。

    注1: FixedMode 设置为Right表示所有记录的长度必须相同

    注2:类构建器会自动使您的类密封,因此无法为性能目的进行继承。

    注3:对于您不感兴趣的任何位置,您必须创建一个字段,但是如上所述添加属性并且不会填充它(参见上面跳过三个字段的内容)因为它们是连续的,但只创建了一个字段)