2016-09-30 4 views
0

Мне нужно найти работу в списке i, файл im, использующий в качестве test.txt, имеет одну строку, которая гласит: «Это тест», который все считывается в один элемент в список, я хочу, чтобы программа, чтобы найти, если слово «тест» в списке и если так изменить его на капитал .. Вот мой код для чтения все вНайти слово в списке

string line; 
     var list = new List<string>(); 
     var fileStream = new FileStream(@"c:\location\test.txt", FileMode.Open, FileAccess.Read); 
     var streamReader = new StreamReader(fileStream, Encoding.UTF8); 
     while ((line = streamReader.ReadLine()) != null) 
      { 
       list.Add(line); 
      } 
      //These are a few tries i made, none of them are doing the job tho 
      //bool inlist = list.Contains("test"); 
      //var value = list.Find(item => item.name == "test").value; 
      //var results = Array.FindAll(lines, s => s.Equals("test")); 
+0

Хотите ли вы пересохранить заглавное слово в файле? –

+1

@MaorVeitsman: хороший вопрос, но это не то, о чем просит OP, и пригласит несколько вопросов в одну запись (что не является целью StackOverflow). – IAbstract

+2

В чем проблема, с которой вы сталкиваетесь? Единственный намек, который у нас есть, заключается в следующем: «// Пробовал кое-что здесь, чтобы работать, и все провалилось». Обратите внимание, что на этом сайте не нравятся «вопросы», которые: «Вот мои требования. Сделайте это, спасибо», нам нужно посмотреть, что вы пробовали и где это происходит. – Quantic

ответ

1

Попробуйте использовать Linq и Регулярные выражения (для извлечения test как всего слова, а не часть слова, например участник):

var list = File 
    .ReadLines(@"c:\location\test.txt") 
    .Select(line => Regex.Replace(line, "\btest\b", "TEST")) 
    .ToList(); // If you want List materialization 

Если вы хотите переименовать test только 1-й линии:

var list = File 
    .ReadLines(@"c:\location\test.txt") 
    .Select((line, index) => index == 0 
     ? Regex.Replace(line, "\btest\b", "TEST") 
     : line) 
    .ToList(); // If you want List materialization 
1

Попробуйте следующее. Вы можете сделать гораздо больше с Regex (регулярным выражением), но это будет напрямую ответить на ваш вопрос:

var lines = new List<string>(); 

using(var fileStream = new FileStream(@"c:\location\test.txt", FileMode.Open, FileAccess.Read) 
using(var streamReader = new StreamReader(fileStream, Encoding.UTF8) { 
    while (!streamReader.EndOfStream) { 
     lines.Add(streamReader.ReadLine()); 
    } 
} 

lines[0].Replace("test", "Test"); 

обобщать функции вы можете сделать что-то вроде этого:

void FindAndReplace(List<string> lines, string toFind, string toReplace) { 
    for(int i = 0; i < lines.Count ; i++) { 
     lines[i] = Regex.Replace(lines[i], $"\b{toFind}\b", toReplace); 
    } 
} 
+0

Более точная реализация (в обобщении) есть '{Regex.Escape (toFind)}' (что, если я хочу заменить '" * "' на '" + "') –

+0

Что делать со строкой, возвращаемой из 'Regex.Replace':) –

+0

исправлено, чтобы обновить элемент в списке. – IAbstract

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

  • Нет связанных вопросов^_^