Hi hotto
Tipp: Verwende q() oder qq() für einfach bzw. doppelt quoten, das ist oftmals übersichtlicher.
Geht auch nicht :-(
Hier das Übungsprogramm. Im ersten Ausgabeteil wird die komplette CSV ausgegeben. Im Zweiten Teil sollte nur Felder mit "G" ausgegebenwerden. Das ganze sollte eine Übung zum ansprechen von CSV-Dateien als DB sein.m Sollte - weil es klappt einfach nicht. Aktueller Perl Code:
#!/usr/bin/perl
# sollte in keinem Script fehlen
use strict;
use warnings;
# DBI Modul Laden
use DBI;
# Verzeichnis mit dem Script finden.
# "." muss nicht immer das Verzeichnis mit dem Script sein
use FindBin '$Bin';
# Sollte man machen.
# es hilft die Dateinamen
# von den Tabellennamen zu trennen.
my %zuordnung=(
prospects => {
file => 'prospects.csv',
col_names => ['Name', 'Address', 'Floors', 'Donated last year', 'Contact'],
},
);
# Verbindung aufbauen
my $dbh = DBI->connect("DBI:CSV:", undef, undef, {
# Zeilenseparator
csv_eol => "\x0A",
# Spaltenseparator:
csv_sep_char => ",",
# Verzeichnis mit den Dateien
f_dir => $Bin,
# Zuordnung Dateiname -> Tabelle
csv_tables => \%zuordnung,
# bei Fehlern immer sterben:
RaiseError => 1,
}
) or die($DBI::errstr);
# Testausgabe Nr.1: ganze CSV
my $sth=$dbh->prepare('SELECT * FROM prospects');
$sth->execute();
while(my @row = $sth->fetchrow_array){
print join('; ',@row)."\n";
}
$sth->finish;
#Textausgabe Nr.2: sortierte CSV
$sth = $dbh->prepare("SELECT * FROM prospects WHERE Name LIKE 'G%'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref){
print qq(name = $row->{Name} contact = $row->{Contact})."\n";
}
$sth->finish();
$dbh->disconnect();
Diese "hash"-Geschichte macht mich echt noch fertig.
Hier die Ausgabe im Terminal inkl. Fehler:
-----------------------------------------------------------------------
Name; Address; Floors; Donated last year; Contact
Charlotte French Cakes; 1179 Glenhuntly Rd; 1; Y; John
Glenhuntly Pharmacy; 1181 Glenhuntly Rd; 1; Y; Paul
Dick Wicks Magnetic Pain Relief; 1183-1185 Glenhuntly Rd; 1; Y; George
Gilmour's Shoes; 1187 Glenhuntly Rd; 1; Y; Ringo
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
name = contact =
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
name = contact =
-----------------------------------------------------------------------
Ziel:
Es soll in der Namespalte alle datensätze angezeigt werden, die ein "G" enthalten oder mit "G" beginnen - so genau hab ich das Beispiel noch nicht verstanden. Aber es sollte doch zumindest ohne Fehlermeldung arbeiten.
Also: Wer einen Anhaltspunkt sieht, was hier falsch läuft, darf es mir gerne mitteilen. Ich bin nach unzähligen Versuchen mit meinem Latein am Ende.
Gruss HP-User
P.S.
(Ich hol mir jetzt erst einmal einen Caffe! Den hab ich mir verdient und der beruhigt die Nerven :-)