2012-03-09 2 views
-1

У меня есть текстовый файл, который содержит много данных каждый на новой линии , но я хочу, чтобы извлечь строки, которые начинаются со значениями:C# Синтаксический текстовый файл для извлечения определенной строки

координаты = (111222333)

Есть несколько примеров этой строки, и я бы действительно хотел извлечь часть «111,222,333» , как я могу это сделать?

+2

Downvote, я не могу видеть любую проблему здесь ... нет исследований вообще ... Нет кода экстракт, который не смог работать ... – squelos

+0

я не нужна помощь о том, как сделайте это .. im new with C# ... поэтому я не знаю, что нужно делать. –

+0

Регулярные выражения! В любом случае, если каждая строка подобна, вы можете просто анализировать каждую строку (например, наивный .INI-парсер). –

ответ

4

Нечто подобное

var result = File.ReadAllLines(@"C:\test.txt") 
    .Where(p => p.StartsWith("coordinates=(")) 
    .Select(p => p.Substring(13, p.IndexOf(')') - 13)); 

Первая строка совершенно ясно, фильтры второй строки для только строки, которые начинаются с coordinates=(, третья линия извлечения подстроку (13 длина coordinates=()

result - IEnumerable<string>. Вы можете преобразовать его в массив с result.ToArray()

+0

Это один из способов, но если вам нужна большая гибкость (например, переменная длина, например 1,22,333, то распознается), вы можете использовать 'RegEx'. EDIT: Просто видел, что вы сделали это с помощью 'IndexOf', но все-таки RegEx' является более гибким (но и более сложным) ... – ChrFin

+0

спасибо .. но что, если есть строка из более чем 13 .. coz there также являются определенными -ve координатами .. –

+1

@chrfin Я не вижу проблемы в моем коде ... Он поддерживает строки, такие как координаты = (1,2,3). 13 - это только длина 'координат = (', а не '111,222,333' – xanatos

3
var text = File.ReadAllText(path); 
var result = Regex.Matches(text, @"coordinates=\((\d+),(\d+),(\d+)\)") 
     .Cast<Match>() 
     .Select(x => new 
     { 
      X = x.Groups[1].Value, 
      Y = x.Groups[2].Value, 
      Z = x.Groups[3].Value 
     }) 
     .ToArray(); 
+0

+1 Но, как побочный элемент, это предварительно загрузит весь файл в память, а затем разделит его ... Это невозможно. и это может быть лучше для Regex по очереди. – xanatos

+0

@xanatos Это просто для простоты. Вы можете, конечно, вызывать его по строкам. –

Смежные вопросы