Парсинг значения из строки со структурой "ключ = значение" - PullRequest
1 голос
/ 23 августа 2011

У меня есть такая строка:

SUBJECT=Some text here\r\n
VALUE=19355711\r\n
RCV_VALUE=2851404175\r\n
RESULT=1\r\n
CNCODE=0\r\n
KEY1=1\r\n
KEY2=2

Теперь мне нужно получить значения RCV_VALUE и RESULT из этой строки.Положение этих клавиш в строке может отличаться.Они также могут быть в начале и / или в конце строки.

Значение РЕЗУЛЬТАТА, которое я должен получить как int, а значение RCV_VALUE, которое я должен получить как string.

Как лучше всего получить значения этих ключей независимо от их положения в строке?

Ответы [ 4 ]

3 голосов
/ 23 августа 2011

Лучшая ставка - это регулярное выражение

var regex=new Regex(@"RCV_VALUE=(?<value>\d+)");
var match=regex.Match(inputString);
var rcv_value=int.Parse(match.Groups["value"].Value);
1 голос
/ 23 августа 2011

Вы можете легко добиться этого, используя регулярное выражение, как показано в примере ниже.

Regex expr = new Regex(@"^(?<Key>.*)=(?<Value>.*)$", RegexOptions.IgnoreCase | RegexOptions.Singleline);

var m = expr.Match("SUBJECT=Some text here\r\n");
var key = m.Groups["Key"].Value;
var value = m.Groups["Value"].Value;
// or 
var kvp = new KeyValuePair<string, string>(m.Groups["Key"].Value, m.Groups["Value"].Value);

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

0 голосов
/ 23 августа 2011

Попробуйте

var RCV_VALUE = Regex.Match(myString, "RCV_VALUE=(\d+)").Groups[1].Value
0 голосов
/ 23 августа 2011

Используйте строку spilled , чтобы разбить ее на несколько строк, а затем переберите массив. После этого я использовал бы indexof и удаление подстроки или строки, чтобы получить нужные мне части.

Все это, как говорится, этот вопрос пахнет "делай мою работу за меня". Я бы порекомендовал перейти на www.codeproject.com и изучить основы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...