akalend
@akalend
программирую

Как оптимально обойти несколько файлов c одновременным их изменением?

Есть три разных файла (F1, F2, F3) более 100 полей каждый, но с присутствием трех обязательных полей dep_no user_id & code (dep_no и user_id входит в составной ключ, можно позиционироваться как по [user_id] так и по [dep_no : user_id].

Нужно последовательно обойти эти файлы (сперва F1,потом F2 и F3... хотя порядок значения не нимеет), и если code в одном из них !=0, то это значение перенести в остальные файлы с таким же user_id с минимальным обращением к диску.

Допустимые операции: Locate(key) - позиционирование по ключу без чтения записи (позволяет узнать есть ли такая запись),
First() - выбрать первую запись и прочесть
Next( ) то же но следующую
ifEOF() проверка на конецфайла
getRecNo() - получение физ номера
setRecNo() позиционирование по физ номеру.

Принципиально, можно исп STL но записей в файле много (неск млн), в некоторых файлах user_id не уникальный ключ.

Напрашивается самый простой вариант: сперва последовательно обходим первый файл F1, если находим code>0 то по user_id позиционируемся в F2,F3 и делаем Update. Но когда уже будем обходить F2, то дойдя до user_id c code>0 эта запись уже могла быть проабдейчена в F1. Очень жесткие требования по производительности. Тут можно использовать std::set, добавлять проабдейченные user_id в set и проверять их наличие при обходе файлов F2 & F3

может есть что-то более оптимальнее?
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
customtema
@customtema
arint.ru
Разделяйте, властвуйте...

  1. Считать все файлы в объемный массив
  2. (Я бы еще записал md5)
  3. Произвести требуемые изменения над полученной структурой данных
  4. Записать файлы (если было записано md5 - можно проверять необходимость записи, детектируя факт изменений)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы