Объединение нескольких текстовых файлов txt построчно c редактированием значений

Необходимо объединить несколько файлов (3-10) в один построчно, при этом к с возможностью взаимодействия со строками.

2-3 файла еще можно обойти, но если их будет больше 10 цикл будет слишком большой. Подскажите, как лучше сделать.

using (StreamWriter writer = File.CreateText("10.txt"))
{
    using (StreamReader sr1 = new StreamReader(path, Encoding.Default))
    {
        using (StreamReader sr2 = new StreamReader(path, Encoding.Default))
        {
            string line1 = null;
            string line2 = null;
            while ((line1 = sr1.ReadLine()) != null)
            {
                line1 = line1 + " sr1";
                writer.WriteLine(line1);
                line2 = sr2.ReadLine();
                if (line2 != null)
                {
                    line2 = line2 + " sr2";
                    writer.WriteLine(line2);
                }
            }
        }
    }
}

Пример:

Есть несколько файлов (может быть больше) txt c 50 строками в каждом

  • первый.txt
  • 1
  • 1
  • и так далее...
  • второй.txt
  • 2
  • 2
  • и так далее...
  • третий.txt
  • 3
  • 3
  • и так далее...

Объединить построчно в 1 файл txt, берем по 1 значению из каждого файла по порядку

  • 1 (первая строка из первого)
  • 2 (первая строка из второго)
  • 3 (первая строка из третьего)
  • 1 (вторая строка из первого)
  • 2 (вторая строка из второго)
  • 3 (второая строка из третьего)
  • и так далее...

При этом в коде иметь доступ к дополнительному редактированию строк: К строкам из первого файла добить значение одной переменной (АА), К строкам из второго файла другой переменной (ББ) и так далее. Чтобы в итоге получилось

  • 1АА
  • 2ББ
  • 3ВВ
  • 1АА
  • 2ББ
  • 3ВВ
  • и так далее...

Ответы (2 шт):

Автор решения: Akina

Схематично (no syntax):

open file1;
open file2;
...
open fileN;
open outfile;
do 
    flag=0;
    tmp=readline(file1);
    if (tmp != null)
        outfile.write(tmp + "addition for file1");
        flag=1;
    tmp=readline(file2);
    if (tmp != null)
        outfile.write(tmp + "addition for file2");
        flag=1;
    ...
    tmp=readline(fileN);
    if (tmp != null)
        outfile.write(tmp + "addition for fileN");
        flag=1;
while (flag=1);
close all;
→ Ссылка
Автор решения: Alexander Petrov
var files = new string[] { "a.txt", "b.txt", "c.txt" };
var values = new string[] { "A", "B", "C" };

if (files.Length != values.Length)
    throw new IndexOutOfRangeException("Arrays lengths do not match");

var enumerators = new List<IEnumerator<string>>();

foreach (var file in files)
    enumerators.Add(File.ReadLines(file).GetEnumerator());

int counter;
do
{
    counter = 0;

    for (int i = 0; i < enumerators.Count; i++)
    {
        if (enumerators[i].MoveNext())
            Console.WriteLine(enumerators[i].Current + values[i]);
        else
            counter++;
    }
} while (counter < enumerators.Count);

foreach (var enumerator in enumerators)
    enumerator.Dispose();

В массиве files - имена файлов.
В массиве values - значения, которые добавляем к строкам файлов.
Размеры этих массивов должны совпадать.

Открываем файлы на чтение и получаем перечислители (энумераторы), которые заносим в список.

Далее поочерёдно берём значения из энумераторов и присоединяем к ним соответсвующие значения из массива.

Счётчик counter содержит количество неактивных энумераторов, в которых закончились значения.

Количество строк в файлах может быть разным. Если оно во всех файлах одинаковое, то код можно упростить, избавившись от счётчика.

В конце освобождаем ресурсы.

→ Ссылка