2013-10-04 2 views
1

Я уверен, что это не так сложно, как я это делаю. У меня есть строка, которая следует следующей схеме:Лучший способ разбора строки ответа транзакции Fedex с использованием C#

#,"value"#,"next value"#,"next value" . . . 

Мне нужно разобрать пары номера/значения для того, чтобы использовать данные в моем приложении.

Вот пример возвращения:

0,"120"1,""10,"298630427"29,"577015971830"30,"SG MSNA "33,"A1"34,"4625"35,"239"36,"2105"37,"2759"60,"15"112,"0" 

Чтобы усложнить строка может содержать символы новой строки (\ г \ п, или \ г \ п). Я могу справиться с этим, просто удалив строки с несколькими вызовами string.replace.

Я бы в конечном счете хотел проанализировать данные в парах ключ/значение. Кажется, я просто не могу понять свой путь.

Приносим извинения, если это тривиально, но я тянул 18 часов в день в течение двух месяцев, пытаясь достичь предельного срока, и мой мозг выстрелил. Любая помощь или руководство в правильном направлении будут наиболее ценными.

ответ

1
var numVal=Regex.Matches(input,@"\"([^\"]+)\"(\d+)") 
       .Cast<Match>() 
       .Select(x=>new 
       { 
        num=x.Groups[2].Value, 
        value=x.Groups[1].Value 
       }); 

Теперь вы можете перебрать numVal

foreach(var nv in numVal) 
{ 
    nv.num; 
    nv.value; 
} 
+0

@Aniruth - Это сработало так, как мне было нужно. У меня было больше всего этого, но я не мог обернуть голову вокруг регулярного выражения. – Dreampoet

1

Если вы собираетесь прямо в пар ключ-значение, вы можете быть в состоянии использовать LINQ, чтобы сделать вашу жизнь проще. Вы должны знать и обрабатывать случаи, когда вы не соответствуете формату ключ/значение. Однако вы можете достичь этого, используя что-то подобное.

var string_delimiter = new [] { ',' }; 
var kvp_delimiter = new[] { "\"" }; 

var dictionary = string_value.Split(string_delimiter) 
       .Select(kvp_string => kvp_string.Split(kvp_delimiter, StringSplitOptions.RemoveEmptyEntries)) 
       .ToDictionary(kvp_vals => kvp_vals.First(), kvp_vals => kvp_vals.Last());