繁体   English   中英

如何从文本文件 C# Visual Studio 解析特定数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM