Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Общие вопросы > Быстрая сортировка / Delphi XE4 |
Автор: Kirilis2018 20.02.18, 17:08 |
Ребята, здравствуйте. Очень понадобилась ваша помощь. Нужна быстрая процедура что бы разделить текстовый файл и сохранить в отдельные файлы. Пример: Имеется файл .txt в 300 000 строк, пример: 3278.Название организации: Atk 231.Род занятий: Строй-фирма 32345.Тип: Подрядчик 87.Название организации: IRK 12218.Род занятий: Ресторан 34543.Тип: Питание Вопрос: Как разделить этот файл на три текстовых файла что бы: В первом файле были все строки - (с номером)Название организации: и тут текст Во втором файле были все строки - (с номером)Род занятий: и тут текст В третьем файле были все строки - (с номером)Тип: и тут текст То есть нужно так: Первый файл: 3278.Название организации: Atk 87.Название организации: IRK Второй файл: 231.Род занятий: Строй-фирма 12218.Род занятий: Ресторан Третий файл: 32345.Тип: Подрядчик 34543.Тип: Питание В тексте постоянно повторяються есть слова: Род занятий, Название организации и Тип. Вот и по ним нужно отсортировать но как ? |
Автор: Славян 20.02.18, 18:42 |
Да не нужно же ничего "сортировать"! Просто читаем строку и ищем вхождение подстроки "Тип:", или "Название о...:". Найдя=определя нужный тип, записываем строку в соответствующий файл. Сортировка бы заняла O(n*log(n)), а тут будет быстро=линейно O(n)! |
Автор: Kirilis2018 20.02.18, 21:25 |
Цитата Славян @ Да не нужно же ничего "сортировать"! Просто читаем строку и ищем вхождение подстроки "Тип:", или "Название о...:". Найдя=определя нужный тип, записываем строку в соответствующий файл. Сортировка бы заняла O(n*log(n)), а тут будет быстро=линейно O(n)! А как это сделать ? |
Автор: MBo 21.02.18, 00:42 |
Для чтения и записи файлов можно использовать TStringList Вхождение образца - с помошью Pos |
Автор: Fr0sT 21.02.18, 07:34 |
Только если памяти хватит на целый файл (а если он в cp1251 - то его двойной размер потребуется). Легче старый добрый AssignFile + Reset + ReadLn. Либо TStreamReader |
Автор: leo 21.02.18, 14:04 |
Цитата Fr0sT @ Только если памяти хватит на целый файл Легче старый добрый AssignFile + Reset + ReadLn. + SetTextBuf килобайт на 8-32. Иначе терпения не хватит |
Автор: Fr0sT 21.02.18, 15:07 |
А если задача разовая, то можно даже не очень сложным батчем обойтись |