【问题标题】:C# text split logic comma separator and string identifierC#文本分割逻辑逗号分隔符和字符串标识符
【发布时间】:2016-01-07 03:43:27
【问题描述】:

我需要用“逗号分隔符”...和“字符串标识符”

来分割文本

输入 “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
        }

输出 (get)

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" 是的,代码也拆分了它。

但我不需要,谁能帮忙解决这个问题?

【问题讨论】:

标签: c# logic


【解决方案1】:

这是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
}

你会得到你需要的。阅读this

输出:

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

【讨论】:

  • 没问题。很高兴我能提供任何帮助。 ;) 我最近也被困在这里,虽然问题略有不同,所以我的问题的答案是Regex。但我注意到TextFieldParser 在这里适合你。这是我的问题:stackoverflow.com/questions/34607051/…
  • 因为我不确定正则表达式(我不喜欢它)。而且我认为它很难阅读。在我看来,我相信微软图书馆。 :)
  • 哦,是的。我要说的是Regex 最适合my 问题。对于你的,我相信这个工具最适合。 ;)
【解决方案2】:

除非您在这种特殊情况下使用专门的 CSV 库(强烈推荐),否则您将需要编写正则表达式。有关类似问题,请参阅 C#, regular expressions : how to parse comma-separated values, where some values might be quoted strings themselves containing commas。那里给出的正则表达式是

"[^"\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();
}

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多