2015-08-05 2 views
1

У меня есть очень большой текстовый файл, 958 MBAND Я создал следующий скриптIO не читать, не читая весь файл

f = IO.read ("Playback.xml").encode ("utf-8", replace: nil)  
separate_files_array = f.scan /strong text<Bla>.*?<\/Bla>/ 
counter=0 
separate_files_array.each do |x| 
    . 
    . 
    . 
end 

Следующий код только перебирает первые 31 вхождений этого регулярного выражения - и у меня нет идея почему.

Нет, нет никакого способа это все вхождения, я мог видеть его нет, и скрипт запускается на несколько секунд - это не имеет никакого смысла для файла, размером

+0

Невозможно узнать, что происходит без фактического файла 'Playback.xml' - каков наименьший возможный файл, который будет воспроизводить ошибку? Можете ли вы найти какой-либо способ либо прикрепить его сюда, либо отправить его где-нибудь? – matt

+0

Это текстовый файл объемом 900 МБ, содержащий много XML-файлов, где Bla является root, и между каждым узлом Bla есть мусор. Сценарий предназначен для разбивки его на более мелкие файлы. – gilmishal

+0

Нет способа скопировать его - – gilmishal

ответ

0

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

Regexp search through a very large file

причина в том, что File.read не создает буфер по умолчанию - который при использовании слишком большого файла может привести к сбою программы.