【问题标题】:C# Parsing Block of TextC# 解析文本块
【发布时间】:2011-01-17 11:22:57
【问题描述】:

我使用的 API 中的一个函数基本上只返回一大块文本,用分号分隔每个键/值。我将如何在 C# 中解析这样的文本?

result=success;income_today=;income_thismonth=;income_thisyear=;orders_pending=19;orders_today_cancelled=0;orders_today_pending=0;orders_today_fraud=0;orders_today_active=0;orders_today_total=0;orders_yesterday_cancelled=0;orders_yesterday_pending=3;orders_yesterday_fraud= 2;orders_yesterday_active=0;

【问题讨论】:

    标签: c# .net string parsing text


    【解决方案1】:

    嗯,看起来像这样的情况:

    • 调用text.Split(';') 将块拆分为键值对
    • 在每一对上调用 pair.Split('=') 以将其拆分为键和值

    请注意,string.Split 有各种重载,您可能需要查看有关要返回的字符串数量、是否抑制空值等选项。

    【讨论】:

    • 哈哈谢谢 :P 另外,这是对的吗? ampaste.net/d5fb70b78 当我做 listBox1.Items.Add(stat);它可以很好地打印出键/值,但是当我执行 listBox1.Items.Add(values);它在列表框中添加了大量的“String[] Array”。
    • @Brett:是的,它会 - 这就是你在数组上调用 ToString 时得到的结果 :) 你可以试试 AddRange(stats)...
    【解决方案2】:

    我最近遇到了类似的问题。这是一段可能对您有用的代码。策略与Jon Skeet's anwers 相同。

    看起来您的文本块中的键是唯一的,因此您可以使用Dictionary

    string[] pairs = block.Split(';');
    Dictionary<string, string> values = new Dictionary<string, string>();
    
    foreach (var element in pairs)
    {
        var tmp = element.Split('=');
        var key = tmp[0];
        var val = tmp.Length == 2 ? tmp[1] : string.Empty;
        values.Add(key,val );   
    }
    
    foreach (var el in values)
    {
        Console.WriteLine(el);
    }
    

    【讨论】:

      【解决方案3】:

      这里是单行(为清楚起见,格式化为多行)。

      Dictionary<string, string> dictionary = raw
          .Split(new [] { ';', }, StringSplitOptions.RemoveEmptyEntries)
          .Select(x => x.Split('='))
          .ToDictionary(x => x[0], x => x[1]);
      

      【讨论】:

        【解决方案4】:

        我会使用String.Split(Char[])。改编你需要的例子string [] split = words.Split(new Char [] {';'});

        【讨论】:

        • 请注意,由于参数是参数数组(params),因此您不需要显式编写“new char[] {}”部分。
        • 啊我明白了,如果数组只有一个元素 string [] split = words.Split(';');够了吗?
        猜你喜欢
        • 1970-01-01
        • 2015-01-07
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 2012-05-24
        相关资源
        最近更新 更多