Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

C# объединение строк из файла

#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}");

Комментариев нет:

Отправить комментарий