Schrift
[thread]3571[/thread]

newbie sucht Hilfe :)



<< >> 8 Einträge, 1 Seite
J-jayz-Z
 2005-05-19 13:19
#33264 #33264
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich bin ein totaler newbie, was Datenbanke angeht und auch dem DBI Modul. Aber daher, das renee auf seiner website ein so hübsches Beispiel als PDF liegen hat, dachte ich mir, schaust du es dir einfach mal an...
Wenn ich das so mache, wie es renee in seinem Beispiel gemacht hat (für alle die das PDF nicht kennen, hier der Teil, den ich meine):
Code: (dl )
1
2
3
4
5
my @ergebnisse;
while (my @row = $sth->fetchrow_array())
{
push (@ergebnisse, \@row);
}

bekomme ich nur folgende Ausgabe:
Code: (dl )
1
2
3
ARRAY(0x82191d0)ARRAY(0x8219c80)ARRAY(0x8219cd4)ARRAY(0x8219d28)ARRAY(0x8219d7c)
ARRAY(0x8219dd0)ARRAY(0x8219e24)ARRAY(0x8219e78)ARRAY(0x8219ecc)ARRAY(0x8219f20)
ARRAY(0x8219f74)ARRAY(0x8219fc8)ARRAY(0x821a01c)ARRAY(0x821a974)ARRAY(0x821a9c8)

und so weiter...
wenn ich es bei mir allerdings so schreibe:
Code: (dl )
1
2
3
4
5
6
7
my @ergebnisse;
while (my @row = $sth->fetchrow_array())
{
push @ergebnisse, $_ for (@row);
}

print "$_\n" for (@ergebnisse);

bekomme ich zwar die richtigen Ausgaben, würde diese aber gerne etwas formatieren...
Wie kann ich das machen? Ich hab von dem DBI Modul keine Ahnung und bin auch noch ein Perl newbie, also bitte etwas Nachsicht *g
Ich habe 4 Spalten in der Tabelle, das dürfte dafür noch interessant sein, denk ich mal. Danke schonmal für eire Hilfe!
Hier noch das ganze script:
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
#!/usr/bin/perl
use strict;
use warnings;

use DBI;

my $user = '*me*';
my $passwd = '*beep*';
my $db = 'mysql';
my $host = 'localhost';
my $driver = "DBI:mysql:$db:$host";

my $dbh = DBI->connect($driver,$user,$passwd) || die $DBI::errstr;

my $statement = 'SELECT * from filme';
my $sth = $dbh->prepare($statement) || die $DBI::errstr;

$sth->execute() || die $DBI::errstr;

my @ergebnisse;
while (my @row = $sth->fetchrow_array())
{
push @ergebnisse, $_ for (@row);
}

print "$_\n" for (@ergebnisse);

$dbh->disconnect();
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
format_c
 2005-05-19 13:23
#33265 #33265
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Weiso machst du die Ausgabe nicht gleich in der while - Schleife??
Code: (dl )
1
2
3
while (my @row = $sth->fetchwor_array()) {
print @row,"\n";
}


gruß Alex
Taulmarill
 2005-05-19 13:23
#33266 #33266
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
for my $row ( @ergebnisse ) {
print @{$row};
}

siehe perldoc perlreftut
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
format_c
 2005-05-19 13:28
#33267 #33267
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wenn du die Ergebnisse vielleicht noch weiter verwenden willst in for einer Tabellenartige Datenstruktur von perl eigenen sich AoA's Array of Arrays:
Bilden tust du die so:
Code: (dl )
1
2
3
while (my @row = $sth->fetchrow_array()) {
push @ergebnisse,[@row];#Ein Annonymes Array als Element an @ergebnisse anhängen
}

und ausgeben tust du die einzelnen Werte in etwa so:
Code: (dl )
1
2
3
for my $row (@ergebnisse) {
print join(" - ",@$row),"\n"; #Derefenziere $row als Array mit dem @
}

War vielleicht etwas unverständlich. Sag bescheid wenn du damit Probleme hast.
Gruß Alex
J-jayz-Z
 2005-05-19 13:39
#33268 #33268
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wow, mit so einem Ansturm an Antworten hab ich gar nicht gerechnet :)
Hmm, könntest du mir vielleicht erklären, wie das mit den arrays von arrays abläuft?
Es ist genau das, was ich haben wollte, ich kann mir aber nicht so wirklich erklären, wie das geht...
Ich hab das so verstanden: Normalerweise ist ja jedes Element von einem array ($array[0]) mit einer einzelnen Variable zu vergleichen. Und das jetzt das array @ergebnisse mit jedem index (also $array[0], $array[1], usw...) wieder ein array enthält. nämlich eins mit dem Wert von @row von jeder Zeile in der Tabelle. Stimmt das in etwa?
Bitte korigier mich...Danke euch!

EDIT: ich hab das @$row jetzt erst gesehen in der for schleife.
Ich denke, ich bräuchte doch noch eine genauere Erklärung :)
Oder eben was zum nachlesen...\n\n

<!--EDIT|J-jayz-Z|1116495659-->
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
renee
 2005-05-19 14:00
#33269 #33269
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Taulmarill hat Dir schon den richtigen Link geliefert...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Arkhen2
 2005-05-19 14:18
#33270 #33270
User since
2005-03-11
25 Artikel
BenutzerIn
[default_avatar]
Warum nicht einfach nur:

Code: (dl )
1
2
3
4
while( my @row = $sth->fetchrow )
{
    push( @ergebnisse, @row );
}


?
Dubu
 2005-05-19 14:37
#33271 #33271
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@Arkhen2: Weil man dann nur ein flaches Array erhaelt, in dem alle Spalten aller Ergebnisse hintereinander liegen. Das muesste man fuer die Ausgabe manuell wieder auseinander pfriemeln.

Auch der Code aus renees Skript ganz oben mit push (@ergebnisse, \@row) ist so richtig, da @row lokal zu der Schleife ist. J-jayz-Z hat nur die Ausgabe falshc gemacht, weil sich eben kein einfaches Array sondern ein Array of Arrays ergibt.
Die Ausgabe haette er nur so machen muessen wie z.B. format_c.

Ausser perlreftut waeren da noch perllol und perldsc interessant.
<< >> 8 Einträge, 1 Seite



View all threads created 2005-05-19 13:19.