#c_sharp
Имеется txt файл вида: Джон Добрый день! Секретарь Здравствуйте! Вы по какому вопросу? Джон Извините, я хотел бы сдать сессию пораньше, чтобы уехать домой. Секретарь По какой причине Вы хотите досрочно сдать сессию? Нужно объединить 1 + 2 Результат: Джон Добрый день! Секретарь Здравствуйте! Вы по какому вопросу? Потом 3 + 4 Джон Извините, я хотел бы сдать сессию пораньше, чтобы уехать домой. Секретарь По какой причине Вы хотите досрочно сдать сессию? И так до конца файла Считываю файл так FileStream stream = new FileStream(path, FileMode.Open); StreamReader reader = new StreamReader(stream); string str = reader.ReadLine(); stream.Close(); Console.WriteLine(str); Но дальше не знаю,что делать
Ответы
Ответ 1
С помощью библиотеки morelinq это можно сделать так: var stringsPairs = File.ReadLines(...).Batch(2).Select(p => string.Join("\n", p));Ответ 2
Зачем читать по чуть-чуть, если можно одной строкой обойтись: var text = File.ReadAllLines(@"C:\downloads\asdf123.txt"); Или прочитать их же лениво, но по-прежнему одной строкой: var text = File.ReadLines(@"C:\downloads\asdf123.txt"); Получим массив строк (ReadAllLines) или IEnumerable(ReadLines): И после этого соединить строки: var result = string.Join(" ", text); Разделитель по вкусу - хоть пробел, хоть перевод строки. Если же у вас нужно по две объединить (посмотрел разметку вопроса, но не уверен, что правильно понял), то: public IEnumerable Twix(IEnumerable data) { var e = data.GetEnumerator(); while (e.MoveNext()) { var el1 = e.Current; if(e.MoveNext()) { var el2 = e.Current; yield return $"{el1} {el2}"; } else { yield return el1; } } } Запускаем: var result = Twix(text); На выходе: И на закуску linq-однострочник (если будет нечётное число строк, то последняя не попадёт в результат): var result = text.Where((a,i) => i % 2 == 0).Zip(text.Where((a,i) => i % 2 == 1), (a,b) => $"{a} {b}");
Комментариев нет:
Отправить комментарий