小编典典

从文本文件中读取固定宽度的记录

c#

我有一个充满记录的文本文件,其中每个记录中的每个字段都是固定宽度。我的第一种方法是仅使用string.Substring()解析每个记录。有没有更好的办法?

例如,格式可以描述为:

<Field1(8)><Field2(16)><Field3(12)>

具有两个记录的示例文件可能类似于:

SomeData0000000000123456SomeMoreData
Data2   0000000000555555MoreData

我只想确保我不会忽略比Substring()更优雅的方式。


更新: 我最终选择了类似Killersponge的正则表达式:

private readonly Regex reLot = new Regex(REGEX_LOT, RegexOptions.Compiled);
const string REGEX_LOT = "^(?<Field1>.{6})" +
                        "(?<Field2>.{16})" +
                        "(?<Field3>.{12})";

然后,我使用以下内容访问字段:

Match match = reLot.Match(record);
string field1 = match.Groups["Field1"].Value;

阅读 307

收藏
2020-05-19

共1个答案

小编典典

子串对我来说听起来不错。我立即想到的唯一缺点是,这意味着每次都要复制数据,但是除非您证明它是瓶颈,否则我不会担心。子串很简单:)

可以 使用正则表达式来一次匹配整个记录并捕获字段,但是我认为这可能会过大。

2020-05-19