我有一个这样格式化的文件——
{2000}000000012199{3100}123456789*{3320}110009558*{3400}9876
54321*{3600}CTR{4200}D2343984*JOHN DOE*1232 STREET*DALLAS TX
78302**{5000}D9210293*JANE DOE*1234 STREET*SUITE 201*DALLAS
TX 73920**
Run Code Online (Sandbox Code Playgroud)
基本上,大括号中的数字表示字段,后跟该字段的值。例如,{2000}是“金额”字段,其值为 121.99(隐含十进制)。{3100}是“AccountNumber”字段,其值为 123456789*。
我试图找出一种将文件拆分为“记录”的方法,并且每个记录将包含记录类型(大括号中的值)和记录值,但我不知道如何实现。
如何在不循环遍历输入中每个字符的情况下执行此操作?
以不同的方式看待它......该{字符是记录分隔符,该}字符是字段分隔符。你可以只使用Split().
var input = @"{2000}000000012199{3100}123456789*{3320}110009558*{3400}987654321*{3600}CTR{4200}D2343984*JOHN DOE*1232 STREET*DALLAS TX78302**{5000}D9210293*JANE DOE*1234 STREET*SUITE 201*DALLASTX 73920**";
var rows = input.Split( new [] {"{"} , StringSplitOptions.RemoveEmptyEntries);
foreach (var row in rows)
{
var fields = row.Split(new [] { "}"}, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("{0} = {1}", fields[0], fields[1]);
}
Run Code Online (Sandbox Code Playgroud)
输出:
2000 = 000000012199
3100 = 123456789*
3320 = 110009558*
3400 = 987654321*
3600 = CTR
4200 = D2343984*JOHN DOE*1232 STREET*DALLAS TX78302**
5000 = D9210293*JANE DOE*1234 STREET*SUITE 201*DALLASTX 73920**
Run Code Online (Sandbox Code Playgroud)