Удаление нескольких строк из большого файла с помощью сценария ruby - PullRequest
1 голос
/ 09 февраля 2012
File 1: 1356775 lines
File 2: 9516 lines

Файл 2 содержит строки чисел, которые при сопоставлении в файле 1 должны быть удалены из этого файла. Пример:

Файл 1

34234323432 some useless stuff
23423432342 more useless stuff
98989898329 foo bar blah
65367389473 one two three

Файл 2

234234323
653673894

Новый файл

34234323432 some useless stuff
98989898329 foo bar blah

Мой подход сейчас к

  1. Считать весь файл file2 в массив
  2. Получить первую строку из File1 и извлечь первые 8 чисел
  3. Выполните цикл по всему массиву с шага 1, чтобы увидеть, совпадают ли 8 чисел с шага 1
  4. Если числа не совпадают, записать строку из шага 1 в новый файл
  5. Если они совпадают, выходить из цикла и не записывать строку в новый файл
  6. продолжайте, пока больше не будет строк для чтения из шага 2

Однако, поскольку файл очень большой, это занимает огромное количество времени, поскольку для каждой строки в файле1 мы перебираем весь массив (9516 элементов). Есть ли более простой способ сделать этот тип манипулирования файлами, не помещая записи из файла в таблицу БД.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Считать файл2 в хеше с номером в качестве ключа и «истиной» в качестве значения. Хэши предназначены для быстрого поиска - намного быстрее, чем массивы .

0 голосов
/ 09 февраля 2012

Вы можете читать фрагменты файла File1 в память, избегая большого количества блокирующих операций ввода-вывода.

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