разделение большого текстового файла на более мелкие текстовые файлы

#c# #winforms #streamreader #streamwriter

Вопрос:

Я пытаюсь разделить текстовый файл на основе количества строк, которое содержит около 6 миллионов строк, и каждый файл всегда должен заканчиваться (последняя строка) определенным идентификатором. Что я пытался:

     using (System.IO.StreamReader sr = new System.IO.StreamReader(inputfile))
    {
        int fileNumber = 0;
        string line = "";
        while (!sr.EndOfStream)
        {
            int count = 0;
            //identifier = sr.ReadLine().Substring(0,2);
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(inputfile     fileNumber   ".TXT"))
            {
                sw.AutoFlush = true;
                

                while (!sr.EndOfStream amp;amp;   count < 1233123)
                {
                    line = sr.ReadLine();
                    sw.WriteLine(line);
                }
       //having problems starting here not sure how to implement the other condition   == "JK"
                line = sr.ReadLine();
                if (count > 1233123 amp;amp; line.Substring(0,2) == "JK")
                {
                    sw.WriteLine(line);
                }
                else
                {
                    while (!sr.EndOfStream amp;amp; line.Substring(0,2) != "JK")
                    {
                        line = sr.ReadLine();
                        sw.WriteLine(line);
                    }
                }
               
            }
        }
    }
 

пример входного текста выглядит так:

 AAadsadasdasdasdfsdfsdfs
Bbasfafasfasdfdsfsdfsdff
CCsafsdfasdadfasdfasfsaf
DDasdsfsdfsafdsadfsafasf
JKdfgdsgdsfgsdfgsfgdfgdf
AAfsdfsadfsdfsaadfadasda
BBadfasdfasdfdsfasfasdas
CCadasdsfasdfasfasfasfds
DDsdfsdafasdfsdfdsfsdfsd
EEsadfsfsasafasdfsdfsdfs
FFasfasfadsdfdsadssfsdfs
JKadsadasdasdadsadasdasa
AAadasdasdasdasdasdasdas
BBasdadadadasdasdasdasdd
CCadasdasdasdasdasdasdad
JKsafsdfsdfasfasdfdasfsa
 

В основном я пытаюсь добиться того, чтобы у меня было несколько текстовых файлов, содержащих не менее 1233123 строк или более (т. Е. Если в строке 1233123 нет «JK», продолжайте запись в текущий файл, пока он не будет найден).

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

1. Хорошее описание того, что вы пытаетесь сделать. Но в чем же вопрос? Обычно рекомендуется включать пример ввода, ожидаемый результат и фактический результат.

2. Привет! спасибо за ваш ответ, в основном я пытаюсь разделить текстовый файл на несколько файлов с 2 условиями, я знаю, как применить по крайней мере первое условие, т. е. на основе количества строк, т. е. ( я могу генерировать несколько текстовых файлов с количеством строк x), но возникли проблемы с реализацией другого условия, т. е. каждый файл txt должен иметь конечную строку, содержащую «JK».

3. Итак, Струна. Содержит ?

4. Я использую подстроку, так как так называемый идентификатор «JK» всегда является первыми 2 символами в строке, моя проблема с этим кодом в том, что мне почему-то не хватает 1 или 2 строк в текстовом файле :/

5. итак, я попытался создать фиктивные данные примерно с 60-68 строками, и я заметил, что, как только я наберу количество целевых строк, он не добавит/не запишет эту строку, т. е. если мои целевые строки равны 10 на файл, он пропустит 10-ю строку в исходном файле.

Ответ №1:

Во время чтения и записи файлов проверьте, верно ли ваше условие , номер строки больше 1233123 и строка, начинающаяся с. JK В этом случае вы можете прекратить запись во фрагмент файла и продолжить следующую итерацию вашего самого внешнего цикла, который начнет запись в следующий файл.

 using (System.IO.StreamWriter sw = new System.IO.StreamWriter(inputfile     fileNumber   ".TXT"))
{
    sw.AutoFlush = true;                

    while (!sr.EndOfStream)
    {
        line = sr.ReadLine();
        sw.WriteLine(line);

        if(  count > 1233123 amp;amp; line.Substring(0,2) == "JK")
        {
            break;
        }
    }
}
 

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

1. Вместо строки. Подстроку(0,2) можно использовать в строке. Стартсвит(«JK») также

2. повлияет ли это на скорость или это просто одно и то же o;

3. Я не знаю, быстрее это или нет, но, на мой взгляд, лучше прочитать и понять, что происходит. Веревка. Метод StartsWith(«текст»), вероятно, проверяет, является ли строка. Подстрока(0, текст. Длина) равна «тексту», так что это просто ярлык, который в любом случае подразумевает подстроку (). Может быть, кто-нибудь сможет подтвердить.