固定字段起始位置
Fixed field start position
我刚刚发现了令人惊叹的 FileHelpers 库。 (过去我已经开发了自己的基于属性的 import/export 库)。
我想知道是否存在固定记录为每个字段指定起始字符的可能性。
示例:
输入文件
3232432GIANLUIGI
4234234马里奥
我只想从第 8 个字符导入名称 (Gianluigi)。
我只想读取 CustomerName,没有我必须忽略的文件(尤其是当我们谈论性能时)。
我的真实案例是关于一条记录,它为将来的实施保留了记录位置。
示例:
-从1到100实数字段
-从 101 到 150 无字段 - 为将来实施保留的位置
-从151到160实数字段
-从 161 到 185 另一次没有字段 - 为将来实施保留的位置
-从 186 到 ...N 个实数字段。
我想避免为什么都不读创建假字段(例如从 101 到 150 和从 161 到 185)。
对于我想象的每个 FieldFixedLength 属性的起始位置。
是的,完全是do-able。有几种方法可以做到这一点,我会手动生成:
[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 附带的 Class 向导可能更容易,您可以在其中 select 内置 class 所需的语言。
- 将 class 名称设置为
Customer
- Select 定长记录
- 根据需要设置FixedMode
- 点击下一步
- 设置你想要的字段数,例如
2
- 如果您有 header 行,请将 忽略第一个 设置为
1
- 勾选忽略空行
- 点击下一步
- 在第一个框中,输入 Name 作为
CustomerID
,Type 作为 int
和 长度作为8
- 在第二个框中,输入
CustomerName
,保持 Type 为 string
,将 Length 设置为您的最大值(例如,80
)和 Trim 到 Both
(或者 Right
,如果你想在开头有空格)。
此时,右侧将是您刚刚构建的class。这正是我手动输入的内容,因为我已经知道如何构建这些 classes.
注意 1: FixedMode 设置为 ExactLength
意味着所有记录的长度必须相同
注意 2:class 生成器会自动将您的 class 密封,因此出于性能目的它不会被继承。
注意 3: 对于您不感兴趣的任何职位,您将必须创建一个字段但添加上述属性,它不会填充它(见上文)其中跳过三个字段,因为它们是连续的,但只创建一个字段)
我刚刚发现了令人惊叹的 FileHelpers 库。 (过去我已经开发了自己的基于属性的 import/export 库)。
我想知道是否存在固定记录为每个字段指定起始字符的可能性。
示例: 输入文件
3232432GIANLUIGI
4234234马里奥
我只想从第 8 个字符导入名称 (Gianluigi)。
我只想读取 CustomerName,没有我必须忽略的文件(尤其是当我们谈论性能时)。
我的真实案例是关于一条记录,它为将来的实施保留了记录位置。
示例:
-从1到100实数字段
-从 101 到 150 无字段 - 为将来实施保留的位置
-从151到160实数字段
-从 161 到 185 另一次没有字段 - 为将来实施保留的位置
-从 186 到 ...N 个实数字段。
我想避免为什么都不读创建假字段(例如从 101 到 150 和从 161 到 185)。
对于我想象的每个 FieldFixedLength 属性的起始位置。
是的,完全是do-able。有几种方法可以做到这一点,我会手动生成:
[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 附带的 Class 向导可能更容易,您可以在其中 select 内置 class 所需的语言。
- 将 class 名称设置为
Customer
- Select 定长记录
- 根据需要设置FixedMode
- 点击下一步
- 设置你想要的字段数,例如
2
- 如果您有 header 行,请将 忽略第一个 设置为
1
- 勾选忽略空行
- 点击下一步
- 在第一个框中,输入 Name 作为
CustomerID
,Type 作为int
和 长度作为8
- 在第二个框中,输入
CustomerName
,保持 Type 为string
,将 Length 设置为您的最大值(例如,80
)和 Trim 到Both
(或者Right
,如果你想在开头有空格)。
此时,右侧将是您刚刚构建的class。这正是我手动输入的内容,因为我已经知道如何构建这些 classes.
注意 1: FixedMode 设置为 ExactLength
意味着所有记录的长度必须相同
注意 2:class 生成器会自动将您的 class 密封,因此出于性能目的它不会被继承。
注意 3: 对于您不感兴趣的任何职位,您将必须创建一个字段但添加上述属性,它不会填充它(见上文)其中跳过三个字段,因为它们是连续的,但只创建一个字段)