2014-01-09 3 views
-1

У меня есть следующий фрагмент кода:Ruby: line.start_with? не читает критерии переменной правильно

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) 

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

ответ

1

Вы передаете строку «„SELECT“,„UPDATE“» работать, вместо этого вы должны передавать строки отдельно (вы можете использовать списки и параметр expension, если вы создаете те динамически):

criteria = ["SELECT", "UPDATE"] 
... 
line.start_with?(*criteria) 
1
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) 
Смежные вопросы