#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, текст. Длина) равна «тексту», так что это просто ярлык, который в любом случае подразумевает подстроку (). Может быть, кто-нибудь сможет подтвердить.