Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657

Разбивка txt файла на части построчно

07.02.2025, 19:30. Показов 4320. Ответов 53

Студворк — интернет-сервис помощи студентам
Помогите записать код. Нужно разбить большой txt файл, размером около 600 гб, в котором записан текст посрочно, на файла размером по 10 Гб.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2025, 19:30
Ответы с готовыми решениями:

Записать в текстовый файл часть строки из ListBox
Прошу помощи или совета в решение возникшей у меня проблемы. Мне необходимо создать два текстовых файла (по умалению work.txt и fio.txt),...

Запись в файл построчно
Есть строка. Пишу в файл методом <File.WriteAllText> .добавлял символ \n - не помогает.Как отформатировать её. Или как.Спасибо

Разбить файл на n частей записать в n файлов
Разбить файл на n частей записать в n файлов. Например, файл весит 300 кб его разбить на 3 части и записать в 3 файла по 100 кб. Заранее...

53
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
08.02.2025, 22:43  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Окей. Какой формат у этой БД?
txt
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
08.02.2025, 22:46
Orlov1, txt это расширение. Я спрашиваю про формат. То есть про внутреннюю структуру файла.
0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
08.02.2025, 23:04  [ТС]
OwenGlendower, каждая строка содержит
login:name:surname

Не исключаю ошибки: пропуски строк, длинные строки, нарушение формата строки и тд
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
08.02.2025, 23:09
Цитата Сообщение от Orlov1 Посмотреть сообщение
Не исключаю ошибки: пропуски строк, длинные строки, нарушение формата строки и тд
Значит нужно сначала убрать эти ошибки, а потом уже делить на части. И, кстати, насчет этого. Вы выше писали что "целиком открыть такой файл не позволяют ресурсы железа". А его точно нужно загружать целиком? Построчная обработка файла вам не подойдет?
0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
09.02.2025, 00:15  [ТС]
OwenGlendower, да, я понимаю, что нужно сначала найти ошибки, исключить их, а потом делить. Подойдет и построчная обработка. Я хотел сначала разделить на части, а потом разбираться с ошибками по частям.

Добавлено через 50 минут
OwenGlendower, попробовал открыть файл в EmEditor и программа выдала сообщение, что в файле содержаться очень длинные строки. Похоже вы были правы. Как обойти наличие длинных строк ?
0
Эксперт .NET
 Аватар для Rius
13212 / 7740 / 1681
Регистрация: 25.05.2015
Сообщений: 23,587
Записей в блоге: 14
09.02.2025, 00:19
Писать кастомное чтение строк с обработкой неожиданностей.
0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
09.02.2025, 00:38  [ТС]
Rius, может просто игнорировать строки с большой длинной ? Писать в результирующий файл строки длинной до 200 символов например.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.02.2025, 03:18
Orlov1,
Нет, нужно именно что найти эту длинную строку и понять что там происходит. Пройтись и вычитать её -- 5 минут дела для человека который знает любой язык программирования. На шарпе будет что-то в духе

C#
1
2
3
4
5
6
7
8
foreach (var line in File.ReadLines(sourceFile))
{
    if(line.Length > 50) // число придётся подбирать
    {
        File.WriteAllText(@"temp_check_long_line.txt", line);
        break;
    }
}
Далее смотрим что там такого длинного. Причин может быть куча:
- другой тип переносов, например web
- другая кодировка
- просто мусор и нужно игнорировать.

Разделение на файлы вам не шибко поможет, т.к. листать 10ГБ текста -- не проще. А разбивать на 6000 тыс. файлов -- бессмысленно. Нужно именно отдельными запросами понять что не так, как это править, а потом (в идеале) написать финальную программу которая перегонит из оригинального файла в новый с исправлениями. Возможно не за одну итерацию. Конечный результат всё же лучше собрать в какую-нибудь БД.
0
Эксперт .NET
 Аватар для Rius
13212 / 7740 / 1681
Регистрация: 25.05.2015
Сообщений: 23,587
Записей в блоге: 14
09.02.2025, 08:36
Прикольно, что этот файл, который никакая не база данных, он генерит сам : Считывание файлов по каталогам и запись в текстовый файл

Цитата Сообщение от Wolfdp Посмотреть сообщение
На шарпе будет что-то в духе
Не, у него исключение на самом чтении line из потока.

Надо читать поблочно и вылавливать строки вручную.
А лучше алгоритм формирования переделать, да писать сразу в БД.
0
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
09.02.2025, 09:01
Цитата Сообщение от Orlov1 Посмотреть сообщение
Похоже вы были правы. Как обойти наличие длинных строк ?
Есть же ответ уже...
Цитата Сообщение от OwenGlendower Посмотреть сообщение
переписать код на блоковое чтение.
подсказка:
Здесь по-английски
Здесь перевод
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
09.02.2025, 11:06
Цитата Сообщение от Rius Посмотреть сообщение
Прикольно, что этот файл, который никакая не база данных, он генерит сам
Orlov1, если это так, то вам следует искать ошибку в коде который создает большой файл.
0
09.02.2025, 11:56

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
то вам следует искать ошибку в коде который создает большой файл.
Это для предотвращения его создания, а в разборе уже существующего... это не поможет :)

0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
09.02.2025, 11:57  [ТС]
OwenGlendower, это не так. Тот код вообще никакого отношения к этому файлу не имеет.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.02.2025, 12:03
Цитата Сообщение от Rius Посмотреть сообщение
Не, у него исключение на самом чтении line из потока.
Не заметил что там ошибка. -2_147_483_578 намекает что там все 600ГБ считает одной строкой (может с переносами напутано, типа записывало как "\n", а при чтении ожидает "\r\n").


Orlov1,
Сформируйте кусок вашего файла таким образом и закиньте сюда, хоть глянем что там твориться (если конечно там не секретная инфа).

C#
1
2
3
4
using var reader = new FileStream(@"путь к вашему файлу", FileMode.Open);
var block = new byte[4096];
reader.ReadExactly(block);
File.WriteAllBytes("block.dat", block);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
09.02.2025, 12:14
Цитата Сообщение от Orlov1 Посмотреть сообщение
это не так. Тот код вообще никакого отношения к этому файлу не имеет.
Окей. Тогда, прежде чем писать код, нужно знать что находится в этих длинных строках. Мусор или ряд login:name:surname склеенных в одну длинную строку? Если мусор, то нужно будет сделать код который выкинет мусор из файла, если это полезные данные, то их нужно сохранить и разбить на отдельные строки.
0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
09.02.2025, 13:23  [ТС]
Wolfdp, Wolfdp,
Цитата Сообщение от Wolfdp Посмотреть сообщение
Сформируйте кусок вашего файла таким образом и закиньте сюда, хоть глянем что там твориться (если конечно там не секретная инфа).
block.dat.txt

Добавлено через 1 минуту
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Окей. Тогда, прежде чем писать код, нужно знать что находится в этих длинных строках. Мусор или ряд login:name:surname склеенных в одну длинную строку? Если мусор, то нужно будет сделать код который выкинет мусор из файла, если это полезные данные, то их нужно сохранить и разбить на отдельные строки.
Думаю неправильные переносы или мусор, что вполне не исключено. Поэтому такие строки нужно игнорировать исключая по длине или по символам.
0
Эксперт .NET
 Аватар для Rius
13212 / 7740 / 1681
Регистрация: 25.05.2015
Сообщений: 23,587
Записей в блоге: 14
09.02.2025, 13:28
Данные чужих аккаунтов, почта и пароли? Как интересно!...
0
Любознательный
 Аватар для YuS_2
7406 / 2260 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
09.02.2025, 13:29
Цитата Сообщение от Orlov1 Посмотреть сообщение
Думаю неправильные переносы или мусор, что вполне не исключено. Поэтому такие строки нужно игнорировать исключая по длине или по символам.
попробуйте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Test {
    public static void Main()
    {
        int sizeLimit = 1073741824;
        string path = @"c:\temp\test.txt";
        int n = 1;
        
        try
        {
            
            using (StreamReader sr = new StreamReader(path))
            {
                char[] c = null;
 
                while (sr.Peek() >= 0)
                {
                    c = new char[sizeLimit];
                    sr.Read(c, 0, c.Length);
                    using (StreamWriter sw = new($"c:\\temp\\output{n}.txt"))
                        sw.Write(c);
                    Console.WriteLine(n);
                    n++;
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}
Будет создавать файлы 1ГиБ
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.02.2025, 14:12
Orlov1,
пароли в открытом виде входят в категорию "секретная инфа", старайтесь не кидать их на публичных форумах.

Насколько вижу переносы обычные "\r\n", 100% должно проходить. А значит у вас где-то проблема в середине файла. Строка может быть максимум 2ГБ, а учитывая что у вас текста на 600ГБ -- разброс сильно большой, чтобы ткнуть наугад.

Я думаю вам лучше почитать возможности StreamReader, ссылки кидал выше YuS_2. Далее вы уже поймете как вычитать блоками, найти проблемное место и разобраться что с ним делать. По сути найти такое место несложно:
- считываем блок
- смотрим есть ли в нем \n
- если "да" -- скидываем счетчик
- если нет -- плюсуем в счетчик
- как только счетчик перевалил за 2ккк -- выводим на каком Position это произошло
- далее пишем по новой чтобы дочитало до Position - 2ккк и выводим допустим 1к символов куда нибудь
- смотрим что там происходит и думаем что с этим делать.
0
 Аватар для Orlov1
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
09.02.2025, 14:24  [ТС]
YuS_2, Начиная с output5.txt файлы в notepad ++ не открываются. В диспетчере вижу, что notepad ++ грузить ОЗУ до 97% далее notepad ++ "Приложение не отвечает".
Разбивка еще не завершена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2025, 14:24
Помогаю со студенческими работами здесь

Запись в текстовый файл построчно.
Всем доброго дня! Подскажите каким образом можно записать данные из TextBox'a в определенную строку текстового файла, не удаляя остальных...

Открыть файл по частям.
Можно ли в C# большой файл открывать не весь файл (загружать в оперативу) а по блокам? Т.е. если необходимо открыть большой несколько сот...

Построчная обработка файла или RichTextBox
Доброго времени суток, подскажите как построчно обработать текстовый файл(или текст из richtextbox) состоит из пары десятков Ip адресов...

Как сохранить список файлов директории в "txt" файл построчно?
Как сохранить список файлов директории в "txt" файл построчно? На форме нет ни каких элементов, нужно получить список файлов и тут же...

Разбивка битмапа на пиксели, сохранение в текстовый файл. Проблемы с обратной операцией
Здравствуйте! загружаю изображение в PictureBox, после этого кусок (например, 50*50 пикс) раскладываю на RGB-составляющие сохраняю в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru