Zerlegt eine Zeichenkette ohne Trennzeichen entfernen
Muss ich parse eine Datei zu, um die einzelnen SQL-Anweisungen und führen Sie Sie aus rails-controller.
Ich habe den folgenden code:
@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
Split entfernt das ";" am Ende des SQLs. Gibt es eine Möglichkeit, nicht zum entfernen des ";" und noch die split mit ";".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yup,
scan
es:Könnten Sie loszuwerden, die überschüssige Leerzeichen von Heften auf
map(&:strip)
nach, aber es ist wohl hier nicht notwendig.Beachten Sie, dass dies nur sehr rudimentär und etwas, das wie ein string in die SQL-mit einem Semikolon, wird es brechen. (E. g.
select * from stuff where name = ";";
.)'a; b; c;'.scan(/.*?;/)
Bei der Verwendung
ActiveRecord::Base.connection.execute
Sie nicht brauchen, um die Semikolon in den ersten Platz.Außerdem ist ein weiterer Weg, um split ohne entfernen der Trennzeichen für Gruppen verwenden, wie im folgenden Beispiel gezeigt:
scan
scheint zu müssen, um das Trennzeichen nach jedem Element, nicht nur zwischen Ihnen.Einen regex verwenden, mit einem lookbehind
Dies funktioniert:
lines(separator=';')
- das wird funktionieren, aber es ist schlecht geschrieben. Es solltelines(';')
statt. Aber, verwenden SieFile.readlines(@sql_file, ';')
statt, weil es ist kürzer und macht das gleiche.Sie könnten versuchen, mit
scan
mit einer entsprechenden regex, die Ihnen ähnliche Ergebnisse wiesplit
, aber wenn Sie möchten, zu bleiben Weg ohne regex, können Sie fügen Sie einfach ein Semikolon ein, um jede Zelle in dem array:;
nach jeder Eingabe?