如何从文本文件C#visual studio解析特定数据
我正在尝试解析包含以下数据的文本文件: 数据的组织方式需要确保只显示公司名称、交易日期、来源ID和收到的金额。此文本文件中的所有其他内容都可以忽略 例如:如何从文本文件C#visual studio解析特定数据,c#,visual-studio,parsing,C#,Visual Studio,Parsing,我正在尝试解析包含以下数据的文本文件: 数据的组织方式需要确保只显示公司名称、交易日期、来源ID和收到的金额。此文本文件中的所有其他内容都可以忽略 例如: [Company Name] [Transaction Date][SourceID][Amount Received] COMPANY NAME 01/05/21 061775 $3,009.71 COMPANY NAME 01/08/21 061803
[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上研究过可能的解决方案,似乎使用正则表达式是解决这个问题的主要方向。需要解决的问题是如何跳过文本文件中所有额外的字符和符号,只获取所需的数据。实现这一点的最佳方法是什么?我必须处理一个非常类似的问题,即通过SSH从服务器输出。为了克服如此糟糕的输出,我所做的并不是有史以来最漂亮的作品,但它是实用的。首先,我将文件加载到一个字符串中,然后逐行读取,替换逗号的空格量,输出是一个新的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()方法的简单解析器
哇!嗯,你在哪里以及如何获得这些打印输出?文件很可能是使用固定宽度字段规则生成的,你只需要弄清楚这一点。与创建该文件的人交谈,了解其格式。是的,我也会使用固定宽度解析。看起来有六种不同的记录格式需要处理:标题/副标题/细节/总计等,所以a可能是一个好方法。这并不困难,但以这种格式解析数据非常耗时且非常脆弱。坦率地说,一个完整的皮塔。
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();
}
}
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);
}
}