2013-08-12 4 views
0

У меня есть строка файла с содержимым, как этотзахватить только часть строки в динамическом месте

string a = "12,1,______,_,__;1,23,122;" 

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

string a = "12,1,______,_,__;11,2,1;" 

В этом случае я бы захватить целое число 2.

+1

ли формат всегда то же самое - то есть, 4 запятые, 1 полу- двоеточие, 2 запятые, 1 двоеточие? – Tim

+0

@ Да, да, это всегда одно и то же. – panjo

ответ

3

Если структура всегда одинакова, то:

Разделить строку, и захватите элемент позапрошлом.

var array1 = a.Split(';'); 

// check the array length if it's needed to avoid 
// IndexOutOfRangeException exception 
var array2 = array1[1].Split(','); 

var yourNumber = array2[array2.Length - 2] 

String.Split

1

Попробуйте это регулярное выражение : использование

(?<=;\d*,)\d*(?=,\d*;) 

Пример:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string a = "12,1,______,_,__;1,23,122;"; 
     var regex = new Regex(@"(?<=;\d*,)\d*(?=,\d*;)"); 
     Console.WriteLine(regex.Match(a).Value);    
     a = "12,1,______,_,__;11,2,1;"; 
     Console.WriteLine(regex.Match(a).Value); 
    } 
} 
2

Игнорирование проверки ошибок на минуту, это будет работать:

string a = "12,1,______,_,__;11,2,1;" 
int i = Int32.Parse(String.Split(',')[5]) 

Если это маршрут вы идете, вы должны проявлять особую осторожность, чтобы проверить введенные данные. Проверьте длину массива reutrned от Split и убедитесь, что 5-е значение действительно может быть проанализировано на int.

+0

Вы уверены, что элемент '6'th array? Я думаю, что это пятое. – MarcinJuraszek

1

другой вариант, чтобы разделить текст в массив (если они имеют такой же рисунок):

var output = a.Split(",;".ToCharArray()); 
var value = output[theIndex]; // get the index you want 
Смежные вопросы