use*_*144 10 ruby ruby-on-rails-3
我需要解析一个文件来获取单个SQL语句并从rails控制器运行它们.
我有以下代码:
@sql_file = "#{RAILS_ROOT}/lib/evidence_interface_import.sql"
@sql_stmts_array = File.read(@sql_file).split(";")
@sql_stmts_array.each_with_index do |sql_stmt,s_index|
ActiveRecord::Base.connection.execute(sql_stmt)
end
Run Code Online (Sandbox Code Playgroud)
拆分删除";" 从SQL结束.有没有办法不删除";" 仍然使用";"拆分.
And*_*all 13
是的,scan它:
'a; b; c;'.scan(/[^;]*;/)
#=> ["a;", " b;", " c;"]
Run Code Online (Sandbox Code Playgroud)
你可以通过坚持下去来消除多余的空白map(&:strip),但这里可能不需要它.
请注意,这是非常基本的,并且SQL中带有分号的字符串文字会破坏这一点.(例如select * from stuff where name = ";";)
小智 8
使用时,ActiveRecord::Base.connection.execute首先不需要包含分号.
另外,在不删除分隔符的情况下拆分的另一种方法是使用组,如以下示例所示:
"a;b;c".split(/;/) # => ["a", "b", "c"]
"a;b;c".split(/(;)/) # => ["a", ";", "b", ";", "c"]
Run Code Online (Sandbox Code Playgroud)
这有效:
@sql_stmts_array = File.read(@sql_file).lines(separator=';')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |