Thread Spaltenliste für INSERT Befehl erstellen
(22 answers)
Opened by qwe123qwe at 2014-01-02 21:26
Guten Abend !
gleich am Anfang der Hinweis, daß die Frage eventuell in das Unterforum für die Datenbanken verschoben werden sollte..... So, und jetzt zum Problem : mit folgendem Code Code: (dl
)
1 #!/usr/bin/perl -w möchte ich eine SQLite Datenbank füllen. Grob gesagt läuft das so ab, daß ich mehrere verschachtelte Schleifen habe, aus deren Zählvariablen die Argumente für einen externen Programmaufruf gebastelt werden. Das Programm erzeugt dann eine Datei mit verschiedenen Ergebnissen, die alle in der Form Quotezeilenweise drinstehen (also wie bei einem Hash). In der Datenbank sollen dann in einer Zeile die Schleifenvariablen und die Ergebniswerte stehen. Jetzt könnte ich das natürlich einfach so wie in der letzten Zeile des obigen Codes machen und alle VALUES der Reihe nach in eine einzige INSERT Zeile schreiben. Da das aber recht viele Ergebniswerte sind, würde diese Zeile ellenlang und extrem unübersichtlich werden und deshalb suche ich da eine Alternative. Meine erste Idee war, aus den Zeilen der Ergebnisdatei tatsächlich einen Hash zu bilden, aus diesem Hash zwei Listen (keys + values) zu bilden und dann diese Listen als Variable in die INSERT-Zeile zu setzen. Funktioniert aber nicht, da bei der Variableninterpretation die Listenelemente nicht (mehr) durch Komma sondern nur durch Leerzeichen getrennt werden. Die zweite Idee war, in den Schleifen Zeichenketten zu bauen, die die Listenelement + Kommas als Trenner enthalten und dann diese Zeichenketten als Variable in der INSERT-Zeile zu verwenden. Ich denke, das sollte auch so klappen. Das sieht aber derart "grausam" und nach PASCAL aus, daß ich mir eigentlich nicht vorstellen kann, daß es in perl da keine elegantere Lösung gibt...... So, hoffentlich hab ich das Problem einigermaßen verständlich geschildert. Wäre toll, wenn da jemand eine Anregung für guten Perl-Code hätte... P.S.: allen auch noch ein gutes neues Jahr ! Last edited: 2014-01-02 21:55:59 +0100 (CET) |