我有一个充满记录的文本文件,其中每条记录中的每个字段都是固定宽度。我的第一种方法是简单地使用 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;
最佳答案
使用FileHelpers .
例子:
[FixedLengthRecord()]
public class MyData
{
[FieldFixedLength(8)]
public string someData;
[FieldFixedLength(16)]
public int SomeNumber;
[FieldFixedLength(12)]
[FieldTrim(TrimMode.Right)]
public string someMoreData;
}
那么,就这么简单:
var engine = new FileHelperEngine<MyData>();
// To Read Use:
var res = engine.ReadFile("FileIn.txt");
// To Write Use:
engine.WriteFile("FileOut.txt", res);
关于c# - 从文本文件中读取固定宽度的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/162727/