我有一个充满记录的文本文件,其中每个记录中的每个字段都是固定宽度。我的第一种方法是仅使用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;
子串对我来说听起来不错。我立即想到的唯一缺点是,这意味着每次都要复制数据,但是除非您证明它是瓶颈,否则我不会担心。子串很简单:)
您 可以 使用正则表达式来一次匹配整个记录并捕获字段,但是我认为这可能会过大。