У меня есть следующий фрагмент:

buffer = ""
sourceFile = File.read("#{options[:source]}")
destFile = File.open("#{options[:dest]}", "w+")

criteria = ""
if (options[:ora]) then 
    criteria += "\"SELECT\", \"UPDATE\""
    puts criteria
end

sourceFile.each_line do |line|
    if (line.start_with?("#{criteria}")) then 
        buffer << line
        buffer << "\n\n"
    end
end

File.write("#{options[:dest]}", buffer)

Однако это не работает - целевой файл пуст. Однако, если я жестко запрограммировал if (line.start_with?("UPDATE", "SELECT")) then, он будет работать нормально. Что мне не хватает?

-1
MrDuk 9 Янв 2014 в 20:15

2 ответа

Лучший ответ

Вы передаете в функцию строку «SELECT», «UPDATE», вместо этого вы должны передавать строки отдельно (вы можете использовать списки и расширение параметров, если вы генерируете их динамически):

criteria = ["SELECT", "UPDATE"]
...
line.start_with?(*criteria)
1
utdemir 9 Янв 2014 в 16:21
buffer = ""
sourceFile = File.read("#{options[:source]}")
destFile = File.open("#{options[:dest]}", "w+")

criteria = ""
if (options[:ora]) then 
  criteria += %w(SELECT UPDATE)
  puts criteria
end

sourceFile.each_line do |line|
  if (line.start_with?(*criteria)) then 
    buffer << line
    buffer << "\n\n"
  end
end

File.write("#{options[:dest]}", buffer)
1
Ivan Denysov 9 Янв 2014 в 16:28