【问题标题】:Split line from txt file从 txt 文件中分割行
【发布时间】:2014-07-16 07:02:52
【问题描述】:

我正在尝试从文本文件中拆分每一行

每一行都是这样的:

string text=3,"dac","fsdf,sdf","DdsA 102-13",62.560000000000002,"1397","bes","165/70/R13",945,1380,"Break",10

我需要拆分它,需要获取这12列。 有没有办法拆分它并获得 12 列?如您所见,有些部分还包含“,”(逗号)

【问题讨论】:

标签: c# split string-formatting


【解决方案1】:

试试这样的:

string s = "3,dac,fsdfsdf,DdsA 102-13,62.560000000000002,1397,bes,165/70/R13,945,1380,Break,10"
string[] words = s.Split(',');
foreach (string word in words)
{
    Console.WriteLine(word);
}

string.Split() 方法会返回一个字符串数组,通过参数你可以指定分割原始字符串的字符。

更新:

好的,请看这个answer。 从那里稍微修改了代码:

public IEnumerable<string> SplitCSV(string input)
{
    Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);

    foreach (Match match in csvSplit.Matches(input))
    {
        yield return match.Value.TrimStart(',');
    }
}

string s = "3,\"dac\",\"fsdf,sdf\",\"DdsA 102-13\",62.560000000000002,\"1397\",\"bes\",\"165/70/R13\",945,1380,\"Break\",10";
var words = SplitCSV(s);
foreach (string word in words)
{
    Console.WriteLine(word); 
}

关于如何将此应用于文件中的所有行:

var lines = System.IO.File.ReadAllLines(@"inputfile.txt");
foreach (var line in lines)
{
    var wordsInLine = SplitCSV(line);
    // do whatever you want with the result...
}

【讨论】:

  • 是的,我这样做了,但在某些情况下,它可能是“asdasd,asda”之类的东西,所以它会再分裂一次。
  • 这只是一个示例行,OP 想要所有行的所有字段。
  • @TimSchmelter 我认为问题是关于将一​​行分成 12 列,实际上我仍然这么认为:)
  • 但是 OP 提到这只是一个示例:“我正在尝试从文本文件中拆分每一行,每一行都是这样的:...”
  • 我真的不喜欢成为我现在的那种人,但是如果你再看两句话:“有没有办法把它拆分成12列?” 这是文中唯一的问题:)
【解决方案2】:
 public static String[] SplitCsv(String value)
    {            if (Object.ReferenceEquals(null, value))
            return null;
        const Char quotation = '\"';
        const Char separator = ',';
        List<String> result = new List<String>();
        Boolean inQuotation = false;
        Boolean isStarted = false;
        StringBuilder Sb = new StringBuilder();
        foreach (Char Ch in value)
        {
            if (inQuotation)
            {
                Sb.Append(Ch);
                inQuotation = Ch != quotation;
                continue;
            }

            if (Ch == separator)
            {
                result.Add(Sb.ToString());
                Sb.Length = 0;
                isStarted = true;
            }
            else
            {
                Sb.Append(Ch);
                isStarted = false;
                inQuotation = Ch == quotation;
            }
        }

        if (isStarted || (Sb.Length > 0))
            result.Add(Sb.ToString());

        return result.ToArray();
    }

【讨论】:

    【解决方案3】:
    string[] lines = System.IO.File.ReadAllLines(@"textfile.txt");
    string result[][];
    
    foreach (string line in lines)
    {
        string[] splitedLine = line.Split(',');
        result.Add(splitedLine);
    }
    

    result 是一个包含所有拆分行的数组(您的行可能有不同的字数)

    然后,您可以保存到文本文件中或做任何您想做的事情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多