C#解析文本块

5

我正在使用的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;

4个回答

13

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

  • 调用 text.Split(';') 将文本块分割成键值对
  • 对每个键值对调用 pair.Split('=') 来将其分割成键和值

请注意,string.Split 有多种重载选项可供查看,包括返回字符串数量、是否抑制空值等。


哈哈,谢谢 :P 还有,这个对吗?http://www.ampaste.net/d5fb70b78 当我执行listBox1.Items.Add(stat);时,它可以正常打印出键/值,但是当我执行listBox1.Items.Add(values);时,它会向列表框中添加大量的“String[] Array”。 - user470760
@Brett:是的,这就是在数组上调用ToString时得到的结果 :) 你可以尝试使用AddRange(stats)代替... - Jon Skeet

1

我最近也遇到了类似的问题。这里有一段代码,可能对你有用。策略与Jon Skeet的答案相同。

看起来在你的文本块中键是唯一的,因此你可以使用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);
}

1

这里是一行代码(为了清晰起见,格式化成多行)。

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

0

我会使用String.Split(Char[])。根据示例,您需要适应string [] split = words.Split(new Char [] {';'});


请注意,由于参数是参数数组(params),因此您无需明确编写“new char[] {}”部分。 - Jon Skeet
啊,我明白了,如果数组只有一个元素,那么 string [] split = words.Split(';'); 就足够了吗? - m.edmondson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接