Я обрабатываю текстовый файл на основе записи: так что я ищу начальную строку, которая составляет начало записи: маркер конца записи отсутствует, поэтому я использую начало следующей записи для деления последней записи.
Итак, я создал простую программу для этого, но я вижу то, что меня удивляет: похоже, что Ruby забывает, что существуют локальные переменные - или я нашел ошибку программирования? [хотя я не думаю, что у меня есть: если я определяю переменную "сообщение" перед моим циклом, я не вижу ошибки].
Здесь приведен упрощенный пример с примерными входными данными и сообщением об ошибке в комментариях:
flag=false
# message=nil # this is will prevent the issue.
while line=gets do
if line =~/hello/ then
if flag==true then
puts "#{message}"
end
message=StringIO.new(line);
puts message
flag=true
else
message << line
end
end
# Input File example:
# hello this is a record
# this is also part of the same record
# hello this is a new record
# this is still record 2
# hello this is record 3 etc etc
#
# Error when running: [nb, first iteration is fine]
# <StringIO:0x2e845ac>
# hello
# test.rb:5: undefined local variable or method `message' for main:Object (NameError)
#