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],........)");
}
Quotezeilenweise drinstehen (also wie bei einem Hash)."Schlüssel" = "Wert"
...do('... VALUES ('.join(',', ('?') x @_).')', undef, @_);
Guest werCode (perl): (dl )...do('... VALUES ('.join(',', ('?') x @_).')', undef, @_);
das undef nicht vergessen
2014-01-02T22:11:35 rostiGuest werdas undef nicht vergessen
Nein.
QuoteAn dieser Stelle wird eine Hash-Referenz erwartet.
QuoteNotiere {} statt undef;
Quotelies doch bitte noch einmal die doku. da steht gleich als erstes ein beispiel mit do() und undef.
QuoteIn general, you can ignore "\%attr" parameters or
pass it as "undef".
2014-01-03T09:55:06 rostiEs gibt gute Gründe, eben nicht undef; zu notieren.
QuoteDu kannst das machen wie Du willst.
QuoteEinem der mit DBI beginnt hingegen, dem empfehle ich {} an dieser Stelle.
$dbh->do('INSERT INTO btergebnis ('.join(',', @spalten).') VALUES ('.join(',', ('?') x @werte).') ', undef, @werte);
QuoteDBD::SQLite::db do failed: near "system": syntax error at ./t.pl line 70.
QuoteUse of ?PATTERN? without explicit operator is deprecated at ./t.pl line 70.
Search pattern not terminated or ternary operator parsed as search pattern at ./t.pl line 70.
QuoteINSERT INTO btergebnis (<hier ist die expandierte Spaltenliste>) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
1 2 3 4 5 6 7 8
my $sql = 'INSERT INTO btergebnis (' . join(',', @spalten) . ') VALUES (' . join(',', ('?') x @werte) . ') '; say "Generated SQL: \n$sql\n"; $dbh->do($sql, undef, @werte);
QuoteDBD::SQLite::db sagt dir doch, dass da irgendwo ein Syntax-Error drin ist und zwar an einer Stelle, die "system" heisst.
QuoteDas alles zusammen sieht nicht grausam nach Pascal aus sondern nach einer hoffnungslosen Konzept- und Planlosigkeit der Datenverarbeitung. Das kann doch nicht Dein Ernst sein, eine CSV-Datei über einen system-call zu schleifen und dann mit Perl verarbeiten zu wollen. Und überhaupt: Wo kommen die Daten denn her? Trennzeichen sind Müll, in dem Moment, wenn das Trennzeichen selbst in den Werten vorkommt, jaja, schon gut, das kann maskiert werden, aber ich würde erstmal mit dem reden, der Dir die Daten in CSV-Dateien schickt, da gibts bestimmt andere Möglichkeiten, die Daten sicherer und konsistenter zu transportieren.
Quotebesser wärs, die Schlüssel-Werte-Paare gar nicht erst in irgendwelchen Dateien(CSV, XML, JSON...) zwischenzuspeichern, sondern gleich an das Perlscript zu übergeben