Вставка блока данных в огромный файл с помощью Fortran - PullRequest
0 голосов
/ 06 октября 2010

У меня есть несколько массивных (4,6 миллиона строк) файлов данных, которые я пытаюсь редактировать с помощью fortran. По сути, в файлах есть серия заголовков, за которыми следует таблица чисел. Примерно так:
р он4 бла 99 ггг
1,0e + 01 2,0e + 01 2,0e + 01
2.0e + 01 5.0e + 01 2.0e + 01
.
.
3,2e + -1,0e + 01 1,0e + 00
p he3 blafoo 99 ggg
1.1e + 00 2.3e + 01 2.0e + 01

Моя задача - заменить некоторые записи в одном файле на записи из другого. Список поставляется отдельно.

Я написал код, который уже работает. Моя стратегия состоит в том, чтобы просто прочитать и повторить первый файл, пока я не найду заголовок, который соответствует списку замены. Затем найдите тот же заголовок во втором файле, повторить записи. Наконец, переключитесь обратно на отображение первого файла. Единственная проблема с этим подходом состоит в том, что это SOOOOOO медленно! Я посмотрел на прямой доступ к файлам, но они не имеют фиксированной длины записи. У кого-нибудь есть идея получше?

Приветствия за помощь, Рич

Ответы [ 2 ]

0 голосов
/ 06 октября 2010

Я предполагаю, что вы читаете файл 1 и записываете результаты в файл 3. Файл 2 содержит замены.

Preprocess file 2, by loading each header, and using a hash algorithm to create 
an array with and integer hash representation of each header value in it, and a
pointer/subscript to the values to replace it by.

while there are lines left in file 1

    read an original line from file 1
    hash the original line to get the hash value.

    if the hash value is in the hash array
         write the replacement to file 3
    else
         write the original line to file 3

Это должно сработать.

0 голосов
/ 06 октября 2010

Заголовки в файлах отсортированы каким-либо образом? Если нет, то создание индексного файла заголовков во втором файле должно ускорить первый поиск. Мой фортран очень ржавый, но если вы можете отсортировать заголовки во втором файле в индексный файл со ссылкой на позицию полной записи, вы сможете значительно ускорить процесс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...