2011-01-17 3 views
5

Одна из функций API, которую я использую, возвращает в основном просто большой блок текста, разделяя каждую клавишу/значение на запятую. Как я могу разобрать текст на C#?C# Parsing Block of Text

результат = успех; 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;

ответ

13

Ну, это выглядит как случай:

  • Зов text.Split(';') расколоть блок в пар ключ-значение
  • вызовов pair.Split('=') на каждой паре разделить ее на ключ и значение

Обратите внимание, что string.Split имеет различные перегрузки, которые вы можете захотеть просмотреть для вариантов вокруг числа возвращаемых строк, чтобы подавить пустые значения и т. Д.

+0

Большое спасибо! –

+0

Позвольте мне дать вам свой бронзовый значок 1896;) – Arcturus

+0

haha ​​thanks: P Также, это верно? http://www.ampaste.net/d5fb70b78 Когда я делаю listBox1.Items.Add (stat); он распечатывает ключ/значение штраф, но когда я делаю listBox1.Items.Add (значения); он добавляет тонну «String [] Array» в список. –

0

Я бы использовал String.Split(Char[]). Адаптируя пример, который вам нужен string [] split = words.Split(new Char [] {';'});

+0

Обратите внимание, что вам не нужно явно указывать «новый символ [] {} "в качестве параметра является массив параметров (params). –

+0

А я вижу так, если массив - это только одна строка элемента [] split = words.Split (';'); будет достаточно? –

1

У меня была аналогичная проблема в последнее время. Вот фрагмент кода, который может быть вам полезен. Стратегия такая же, как в 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); 
} 
+0

Это сработало красиво, спасибо! –

1

И вот один вкладыш (отформатированный на несколько строк для ясности).

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