Thread Spaltenliste für INSERT Befehl erstellen (22 answers)
Opened by qwe123qwe at 2014-01-02 21:26

qwe123qwe
 2014-01-02 21:26
#172801 #172801
User since
2013-10-08
65 Artikel
BenutzerIn
[default_avatar]
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl -w

..
..
..
for (my $i = .......) {
for (my $j = ........) {
for (my $k = ........) {
for (my $l = ..........) {
for (my $m = .........) {
for (my $n = ............) {

system("bt_csv.pl --pairs $i,$j,$k,$l,$m,$n >> bt_csv.out");
bt_in_db ($i, $j, $k, $l, $m, $n);
}
}
}
}
}
}


# Funktion zum Abspeichern der Daten in die SQLite Datenbank
sub bt_in_db {
my %ergebnis = ();

open (BTOUT, "<bt_csv.out");
# bt-ausgabedatei zeilenweise einlesen
while (my $zeile = <BTOUT>) {
# jeweilige Werte mittels Muster entnehmen und Variablen zuweisen
if ($zeile = /(.+)\s=\s(.+)/) {
$ergebnis{$1} = $ergebnis{$2};
}
}
close (BTOUT);
# Schleifenargumente und Variablen als einzelne Zeile in SQLite-Datenbank schreiben
# WICHTIG : die Datenbanktabelle MUSS derzeit bereits vorhanden sein ! (macht das Sinn ?)
$dbh->do("INSERT INTO btergebnis VALUES($_[0],$_[1],........)");

}

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
Quote
"Schlüssel" = "Wert"
zeilenweise 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)

View full thread Spaltenliste für INSERT Befehl erstellen