[英]How to parse for specific data from a text file C# visual studio
我正在尝试使用以下数据解析文本文件:
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 上研究可能的解决方案,似乎使用正则表达式是 go 的一般方向。 需要解决的问题是如何跳过文本文件中所有多余的字符和符号,只获取需要的数据。 实现这一目标的最佳方法是什么?
我不得不通过来自服务器的 SSH 处理关于 output 的非常类似的问题。 我为克服如此糟糕的 output 所做的并不是有史以来最漂亮的作品,但它很实用。 首先,我将文件加载到一个字符串中,然后逐行读取替换逗号的空格量,output 是一个新的 CSV 字符串。 这样我就能够更容易地操纵这些值。
这是我所做的一部分。 也许它可以帮助你。
string line = sreader.ReadLine();
while (line != null) // create a csv file
{
if (line.Contains("CO --"))
{
line = Regex.Replace(line, @"\s\s\s+", ",");
CSV += line + "\r\n";
line = sreader.ReadLine();
}
else
{
line = Regex.Replace(line, @"\s\s+", ",");
CSV += line + "\r\n";
line = sreader.ReadLine();
}
}
正如您在上面看到的,有些行我需要替换 3 个空格,而其他行只需要替换 2 个。
使用 Contain() 和 Substring() 方法的简单解析器。
StreamReader sr = new StreamReader(sFileNameOpen);
while (sr.Peek() >= 0)
{
string line = sr.ReadLine();
line = line.Trim();
if (line.ToString() == "" || line.Contains("=======") || line.Contains("A R") || line.Contains("RPC") || line.Contains("--------") || line.Contains("AR Code..") || line.Contains("........") || line.Contains("Last Posting Number:") || line.Contains("Type..") || line.Contains("Grand") || line.Contains("Debit"))
continue; //skip
if (line.Contains("Total Due: "))
{
customerId = line.Substring(9, 16).Trim();
custName = line.Substring(25, 41).Trim();
continue;
}
if (line.Contains("T0") || line.Contains("T1") || line.Contains("T2") || line.Contains("T3") || line.Contains("T4") || line.Contains("T5") || line.Contains("T6") || line.Contains("T7"))
{
txnDate = line.Substring(2, 8).Trim();
txnNum = line.Substring(11, 6).Trim();
AmountRemaining = line.Substring(60, 10);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.