【发布时间】:2021-04-19 18:12:33
【问题描述】:
我正在尝试使用以下数据解析文本文件:
A1 COMPANY NAME COMPANY NAME Total Due: $40,374.56
Type..Tr Date.Source Doc.Description....Terms..Original Amt......Amount Rem
1 01/05/21 061775 Invoice T6 $3,009.71 $3,009.71
1 01/08/21 061803 USMMMKTX7F T6 $2,884.00 $2,884.00
Debit Total : $17,195.04 $17,285.81 $5,893.71 $.00 $.00 $40,374.56
-----------------------------------------------------------------------------------------------------------------------------------
A1 AAL01 SOMETHING INDUSTRIES INC. Total Due: $10,879.70
Type..Tr Date.Source Doc.Description....Terms..Original Amt......Amount Rem
1 02/04/21 061957 Invoice T1 $3,641.90 $3,641.90
1 02/11/21 062002 75094100 T1 $4,546.70 $4,546.70
1 03/04/21 062128 75094270 T1 $2,691.10 $2,691.10
Debit Total : $7,237.80 $3,641.90 $.00 $.00 $.00 $10,879.70
-----------------------------------------------------------------------------------------------------------------------------------
A1 ACS01 ALPHA HEALING SYSTEMS Total Due: $5,334.20
Type..Tr Date.Source Doc.Description....Terms..Original Amt......Amount Rem
1 02/25/21 062076 Invoice T1 $5,334.20 $5,334.20
需要以某种方式组织数据,以便仅显示公司名称、交易日期、来源 ID 和收到的金额。可以忽略此文本文件中的所有其他内容。
例子:
[Company Name] [Transaction Date][SourceID][Amount Received]
COMPANY NAME 01/05/21 061775 $3,009.71
COMPANY NAME 01/08/21 061803 $2,884.00
SOMETHING INDUSTRIES INC. 02/04/21 061957 $3,641.90
SOMETHING INDUSTRIES INC. 02/11/21 062002 $4,546.70
ALPHA HEALING SYSTEMS 02/25/21 062076 $5,334.20
我已经尝试在 google 和 stackoverflow 上研究可能的解决方案,似乎使用正则表达式是解决这个问题的一般方向。需要解决的问题是如何跳过文本文件中所有多余的字符和符号,只获取需要的数据。实现这一目标的最佳方法是什么?
【问题讨论】:
-
哇...呃,您是从哪里以及如何获得这些打印输出的?
-
文件很可能是使用固定宽度字段规则生成的,您只需要弄清楚这一点。与创建文件的人交谈,了解文件的格式。
-
是的,我也会使用固定宽度解析。看起来您有六种不同的记录格式要处理:标题/子标题/详细信息/总计等,因此finite state machine 可能是一个好方法。这并不难,但以这种格式解析数据非常耗时且极其脆弱。坦率地说,一个完整的 PITA。
标签: c# visual-studio parsing