#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}");
Комментариев нет:
Отправить комментарий