C#.Net中的文本解析 [英] Text parsing in C#.Net

查看:79
本文介绍了C#.Net中的文本解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨..我正在分析文本文件.我被卡在一个地方..我想知道如何解析文本文件的文本部分..我想跳过标题(项目,签证等) ..)和(No | Amt)以及表SALES(STD),SALES(ELC)等左侧的标题.我只想在数据库中插入数字值以及MerchantNo和OutletName

Hi..i am working on parsing a textfile.i am stuck at one place..i want to know how can i parse this text part of text file..i want to skip the headers(item,visa,etc..) and(No|Amt) and the headings on left side of table SALES(STD),SALES(ELC),etc.. i want to insert only the numeric values in database along with MerchantNo and OutletName

MERCHANT NO :  105838015                                                                                          
  OutletName    :  Big Bazzar         
                 
ITEM          VISA             MASTERCARD      DINERS             TOTAL                 
------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                    
            | NO|    AMT   |  NO|    AMT   |  NO|    AMT   |    NO|    AMOUNT         
------------------------------------------------------------------------------------------------------------------------------------
SALES(STD) |   0|      0.00|   0|      0.00|   0|      0.00|      0|         0.00      
SALES(ELC) |  10|  16466.78|   9|  16573.86|   0|      0.00|     19|     33040.64      
REFUND     |   1|   -371.20|   0|      0.00|   0|      0.00|      1|      -371.20      
DISC/STD   |   0|      0.00|   0|      0.00|   0|      0.00|      0|         0.00      
DISC/ELC   |  10|   -238.77|   9|   -240.34|   0|      0.00|     19|      -479.11      
DISC/REF   |   1|      6.12|   0|      0.00|   0|      0.00|      1|         6.12      
ACCRUED    |   0|      0.00|   0|      0.00|   0|      0.00|      0|         0.00     



这是我为文本文件编写的代码部分,用于解析文本文件中的其他数据.



This is the part of code which i have wriiten for the textfile for parsing other data in textfile..

foreach (string item in str)
            {
                if (item.Trim().Contains("MERCHANT NO :"))
                {
                    string MNo1 = item.Substring(15, 23).Trim();
                    MNo = Convert.ToInt32(MNo1);
                }

                //condition for retrieving records from textfile
                if (item.Contains("XXXX"))
                { //splitting each and every line to an array based on space between the data.
                    char[] separators = new char[] { ' ' };
                    string[] rec = item.Trim().Split(separators, StringSplitOptions.RemoveEmptyEntries); //44

                    for (int i = 0; i < rec.Length; i++)
                    {
                        if (!String.IsNullOrEmpty(rec[i]))
                        {
                            string Date = rec[0].ToString();
                            AuthDate = Convert.ToDateTime(Date);
                            BNo = rec[1].ToString();
                            SNo = rec[2].ToString();
                            CardNo = rec[3].ToString();
                            TranType = rec[4].ToString();
                            RefNumber = rec[5].ToString();
                            AuthCode = rec[6].ToString();
                            string Amount = rec[7].ToString();
                            TranAmount = Convert.ToDecimal(Amount);

                            SqlConnection con = new SqlConnection("Data Source=COMPUTER-8EB749;Initial Catalog=TRMSDB;Integrated Security=true");
                            con.Open();
                            string columnnames = "MerchantNo,AuthDate,BTNo,SeqNo,CardNo,TranType,RefNo,AuthCode,TranAmt";
                            string InsertQuery = String.Format("insert into TblBank ({0}) values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')", columnnames, MNo, AuthDate, BNo, SNo, CardNo, TranType, RefNumber, AuthCode, TranAmount);
                            SqlCommand cmd = new SqlCommand(InsertQuery, con);
                            cmd.ExecuteNonQuery();
                        }
                        break;
                    }

                }

                //What logic can i apply here..
                 if(item.StartsWith)
                 {
                       char[] separators = new char[] {'|'};
                       string[] amount = item.Trim().Split(separators);

                       for (int j = 0; j < amount.Length; j++)
                       {
                         if (!String.IsNullOrEmpty(amount[j]))
                         { 
                         
                         }
                       }
                     } }


请提供帮助..


Do help..

推荐答案

string[] parts = str.Split("\r\n");

string merchantNumber = "";
string outletName     = "";
int    pos            = -1;

foreach(string line in parts)
{
    if (line.Contains("MERCHANT NO"))
    {
        pos = line.IndexOf(":");
        if (pos >= 0)
        {
            merchantNumber = line.SubString(pos).Trim();
        }
    }
    if (line.Contains("OutletName"))
    {
        pos = line.IndexOf(":");
        if (pos >= 0)
        {
            outletName = line.SubString(pos).Trim();
        }
    }
    if (!string.IsNullOrEmpty(merchantName) && !string.IsNullOrEmpty(outletname))
    {
        break;
    }
}

for int (i = parts.Length - 1; i >= 0; i--)
{
    if (!parts[i].Contains("-----")
    {
        HandleData(parts[i]);
    }
    else
    {
        break;
    }
}

private void HandleData(string data)
{
    string[] parts = data.Trim.Split("|");
    for (int i=0; i<=parts.Length; i++)
    {
        switch (i)
        {
            case 0 : // name
            case 1 : // NO 
            case 2 : // AMT
            ... etc...
        }
    }
}


这篇关于C#.Net中的文本解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆