簡體   English   中英

C#文本拆分邏輯逗號分隔符和字符串標識符

[英]C# text split logic comma separator and string identifier

我需要用“逗號分隔 符”“字符串標識符”分割文本

輸入 “ dtl.txt”

AWD_CODE,AWD_NAME,AWD_TYPE,ADF_REF,FLG_SUM,FLG
DMM,PETCH,01,REF 2/2015,,
TRR,TUCTH,01,REF 2/2015,WD_TRK,F
TGC,DHYTH,02,REF 3/2015,"WD_TRK,WD_TRI",F

操作

  static void Main(string[] args)
        {
            string[] lines = System.IO.File.ReadAllLines(@"D://dtl.txt");

            List<string[]> param = new List<string[]>();

            foreach(string line in lines)
            {
                param.Add(line.Split(','));
            }

            var x = param; // for debug
        }

輸出 (獲取)

array : 
[0] : "AWD_CODE","AWD_NAME","AWD_TYPE","ADF_REF","FLG_SUM","FLG"
[1] : "DMM","PETCH","01","REF 2/2015","",""
[2] : "TRR","TUCTH","01","REF 2/2015","WD_TRK","F"
[3] : "TGC","DHYTH","02","REF 3/2015","\"WD_TRK","WD_TRI\"","F"

輸出 (需要)

array : 
[0] : "AWD_CODE","AWD_NAME","AWD_TYPE","ADF_REF","FLG_SUM","FLG"
[1] : "DMM","PETCH","01","REF 2/2015","",""
[2] : "TRR","TUCTH","01","REF 2/2015","WD_TRK","F"
[3] : "TGC","DHYTH","02","REF 3/2015","WD_TRK,WD_TRI","F"

“ WD_TRK,WD_TRI”是的,代碼也將其拆分。

但是我不需要,任何人都可以幫助解決這個問題嗎?

在這種情況下, Microsoft.VisualBasic.FileIO庫中的TextFieldParser最適合。

using Microsoft.VisualBasic.FileIO; //add this

static void Main(string[] args)
{
    string text = System.IO.File.ReadAllText(@"D://dtl.txt"); //note this

    List<string[]> param = new List<string[]>();
    string[] words; //add intermediary reference

    using (TextFieldParser parser = new TextFieldParser(new StringReader(text))) {
        parser.Delimiters = new string[] { "," }; //the parameter must be comma
        parser.HasFieldsEnclosedInQuotes = true;
        while ((words = parser.ReadFields()) != null)
            param.Add(words);
    }

    var x = param; // for debug
}

您將得到所需的東西。 閱讀

輸出:

array : 
[0] : "AWD_CODE","AWD_NAME","AWD_TYPE","ADF_REF","FLG_SUM","FLG"
[1] : "DMM","PETCH","01","REF 2/2015","",""
[2] : "TRR","TUCTH","01","REF 2/2015","WD_TRK","F"
[3] : "TGC","DHYTH","02","REF 3/2015","WD_TRK,WD_TRI","F"

若要使用它,您需要在參考中包括Microsoft.VisualBasic

除非在這種情況下(特別推薦)使用專門的CSV庫,否則您將需要編寫正則表達式。 參見C#,正則表達式:如何解析逗號分隔的值,其中一些值可能被引號包括相似問題的字符串本身包含逗號 那里給出的正則表達式是

"[^"\\r\\n]*"|'[^'\\r\\n]*'|[^,\\r\\n]*

用以下代碼執行它:

Regex regexObj = new Regex(@"""[^""\r\n]*""|'[^'\r\n]*'|[^,\r\n]*");
Match matchResults = regexObj.Match(input);
while (matchResults.Success) 
{
    Console.WriteLine(matchResults.Value);
    matchResults = matchResults.NextMatch();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM