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

标签 c# .net parsing fixed-width

我有一个充满记录的文本文件,其中每条记录中的每个字段都是固定宽度。我的第一种方法是简单地使用 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/

相关文章:

c# - 如果没有处理程序,Azure IoT 中心直接方法调用会发生什么情况

c# - 检索在 Task.WhenAll 抛出异常时起作用的内容

c# - 如何在xaml中的文本 block 中添加滚动/移动文本

c# - 未从路由 C# 接收数据

c# - CoInitializeSecurity 在 Visual Studio 2017 中抛出 RPC_E_TOO_LATE

.net - 将 RavenDB 用于具有复杂用户对象权限模型的解决方案

java - 如何使用其属性查找 DOM 节点

c# - 如何重载 Collection(Of T) 的 Items 访问器?

c - 如何将结构传递给 yacc 文件中的函数?

parsing - OCaml 中的文件转换