Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文本文件C#visual studio解析特定数据_C#_Visual Studio_Parsing - Fatal编程技术网

如何从文本文件C#visual studio解析特定数据

如何从文本文件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

我正在尝试解析包含以下数据的文本文件:

数据的组织方式需要确保只显示公司名称、交易日期、来源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上研究过可能的解决方案,似乎使用正则表达式是解决这个问题的主要方向。需要解决的问题是如何跳过文本文件中所有额外的字符和符号,只获取所需的数据。实现这一点的最佳方法是什么?

我必须处理一个非常类似的问题,即通过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);
    }
}