Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.222.12] |
|
Сообщ.
#1
,
|
|
|
Ребята, здравствуйте. Очень понадобилась ваша помощь.
Нужна быстрая процедура что бы разделить текстовый файл и сохранить в отдельные файлы. Пример: Имеется файл .txt в 300 000 строк, пример: 3278.Название организации: Atk 231.Род занятий: Строй-фирма 32345.Тип: Подрядчик 87.Название организации: IRK 12218.Род занятий: Ресторан 34543.Тип: Питание Вопрос: Как разделить этот файл на три текстовых файла что бы: В первом файле были все строки - (с номером)Название организации: и тут текст Во втором файле были все строки - (с номером)Род занятий: и тут текст В третьем файле были все строки - (с номером)Тип: и тут текст То есть нужно так: Первый файл: 3278.Название организации: Atk 87.Название организации: IRK Второй файл: 231.Род занятий: Строй-фирма 12218.Род занятий: Ресторан Третий файл: 32345.Тип: Подрядчик 34543.Тип: Питание В тексте постоянно повторяються есть слова: Род занятий, Название организации и Тип. Вот и по ним нужно отсортировать но как ? |
Сообщ.
#2
,
|
|
|
Да не нужно же ничего "сортировать"!
Просто читаем строку и ищем вхождение подстроки "Тип:", или "Название о...:". Найдя=определя нужный тип, записываем строку в соответствующий файл. Сортировка бы заняла O(n*log(n)), а тут будет быстро=линейно O(n)! |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Да не нужно же ничего "сортировать"! Просто читаем строку и ищем вхождение подстроки "Тип:", или "Название о...:". Найдя=определя нужный тип, записываем строку в соответствующий файл. Сортировка бы заняла O(n*log(n)), а тут будет быстро=линейно O(n)! А как это сделать ? |
Сообщ.
#4
,
|
|
|
Для чтения и записи файлов можно использовать TStringList
Вхождение образца - с помошью Pos |
Сообщ.
#5
,
|
|
|
Цитата MBo @ Для чтения и записи файлов можно использовать TStringList Только если памяти хватит на целый файл (а если он в cp1251 - то его двойной размер потребуется). Легче старый добрый AssignFile + Reset + ReadLn. Либо TStreamReader |
Сообщ.
#6
,
|
|
|
Цитата Fr0sT @ Только если памяти хватит на целый файл Легче старый добрый AssignFile + Reset + ReadLn. + SetTextBuf килобайт на 8-32. Иначе терпения не хватит |
Сообщ.
#7
,
|
|
|
А если задача разовая, то можно даже не очень сложным батчем обойтись
|