C99 доступен онлайн . Заключенный в кавычки от www.open-std.org :
lastest публично доступная версия стандарта является объединенным C99 + TC1 + TC2 +, TC3, WG14 N1256, датировался 07.09.2007. Это - рабочий документ WG14, но он отражает объединенный стандарт во время проблемы.
Если вы программируете в современной операционной системе и у компьютера достаточно памяти (скажем, 512 мегабайт), у Ruby не должно возникнуть проблем с чтением всего файла в память.
Ситуация обычно становится нестабильной, когда вы получаете примерно 2-гигабайтный рабочий набор на типичной 32-битной ОС.
Вы должны попытаться поймать исключение, чтобы проверить, действительно ли проблема в блоке чтения или нет.
Просто чтобы вы знали, я уже сделал сценарий с примерно таким же синтаксисом для без проблем поиск по настоящему большому файлу размером ~ 8 ГБ.
export = File.new("resultsfinal.txt","w+")
File.open("bibrec2.dat").each do |line|
begin
line.scan(/[a]{1}[1234567890xX]{10}\W/) do |x|
export.puts x
end
line.scan(/[a]{1}[1234567890xX]{13}/) do |x|
export.puts x
end
rescue
puts "Problem while adding the result"
end
end
Что касается проблемы с производительностью, Я не вижу ничего особо тревожного по поводу размера файла: 180 МБ не должно вызывать никаких проблем. Что происходит с использованием памяти, когда вы запускаете свой сценарий?
Однако я не уверен, что ваши регулярные выражения делают то, что вы хотите. Вот, например:
/[a]{1}[1234567890xX]{10}\W/
делает (я думаю) следующее:
Здесь есть пара образцов сопоставления ISBN и здесь , хотя они, похоже, соответствуют чему-то более похожему на формат, который мы см. на задней обложке книги, и я предполагаю, что ваш входной файл удалил часть этого форматирования.