Schrift
[thread]7716[/thread]

Dereferenzierung: Probleme bei Ausgabe



<< >> 8 Einträge, 1 Seite
tuturutka
 2006-02-17 18:21
#63043 #63043
User since
2006-01-17
7 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich habe mal eine Frage über Arrays.Mein Skript liest eine html-Datei und speichert sie in ein mehrdimensionales array.Die Datei enhält Liste mit Namen, Vornamen und eine Beschreibung zu jedem Namen. Zu einem Vornamen soll das Programm den Familiennamen ausgeben. Es scheint auch zu funktionieren, aber ich komm an den Wert nicht dran. Ich bekomme eine Ausgabe wie  ARRAY(0x224fc0). Ich weis, dass es auch an der Dereferenzierung liegt, aber ich sehe meinen Fehler nicht. Könnt ihr mir dabei helfen.
Danke


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $name= "Harry";

sub nachname {
my $vor = $_[0];
my $index =0;
foreach my $elem ($multiarray [1]){
if ($vor=~$elem) {
return $index;}
$index++;
}
}
my $num =&nachname($name);
my $ausgabe =$multiarray[$num];
print "Gefunden: $ausgabe\n";
Relais
 2006-02-17 18:39
#63044 #63044
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Ausdruck $multiarray [1] bezeichnet das Zweite Element im Array "@multiarray" und ist ein Skalar, also kein Array. Damit wird Deine foreach-Schleife vielleicht unerwartet kurz?

Bei $vor=~$elem hast Du mit größter Warscheinlichkeit einen Fehler begangen, was erwartetst Du, das dieser Ausdruck tut? Wolltest Du vielleicht einen Regulären Ausdruck verwenden? Das hast Du nämlich nicht!
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
tuturutka
 2006-02-17 19:42
#63045 #63045
User since
2006-01-17
7 Artikel
BenutzerIn
[default_avatar]
Ja, das mit $vor=~$elem habe ich gesehen, nachdem ich die Frage geschrieben habe. Ich glaube, es sollte $vor=~"$elem" sein. Vielleicht muss ich meinen Datenstruktur zeigen
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$/="</tr>";
my $testfile;
my @multiarray=();
my @character=();
$testfile = $ARGV[0];
open (FILE, $testfile)or die "Kann FILE nicht geoeffnet werden\n";

while (my $in1 = <FILE>){
 chomp ($in1);
 my @array= split(/\n/,$in1);
 my @character =();
 foreach $in1 (@array) {
   if ($in1=~ /Arial\">(.*?)<\/font>/gio) {
   push @character,$1;
   }
 }
push @multiarray, [@character];
}
close (FILE) or die "Kann FILE nicht geschlossen werden!\n";
coax
 2006-02-18 00:12
#63046 #63046
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=tuturutka,17.02.2006, 18:42]Ja, das mit $vor=~$elem habe ich gesehen, nachdem ich die Frage geschrieben habe. Ich glaube, es sollte $vor=~"$elem" sein.
[/quote]
Wenn du einen String mit einem anderen vergleichen moechtest, dann so
Code: (dl )
if( $foo eq $bar ) { # wenn $foo gleich $bar


Quote
Vielleicht muss ich meinen Datenstruktur zeigen
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$/="</tr>";
my $testfile;
my @multiarray=();
my @character=();
$testfile = $ARGV[0];
open (FILE, $testfile)or die "Kann FILE nicht geoeffnet werden\n";

while (my $in1 = <FILE>){
 chomp ($in1);
 my @array= split(/\n/,$in1);
 my @character =();
 foreach $in1 (@array) {
   if ($in1=~ /Arial\">(.*?)<\/font>/gio) {
   push @character,$1;
   }
 }     
push @multiarray, [@character];
}
close (FILE) or die "Kann FILE nicht geschlossen werden!\n";

Wie's scheint versuchst du Sachen aus einem HTML-Dokument zu extrahieren, nimm besser CPAN:HTML::TreeBuilder oder CPAN:HTML::Parser.
Zu letzterem gibt es einen Artikel im Wiki: HTML parsen mit HTML::Parser
,,Das perlt aber heute wieder...'' -- Dittsche
renee
 2006-02-18 03:32
#63047 #63047
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Neben den Tipps von coax, solltest Du Dir vielleicht mal perlreftut anschauen, da geht es naemlich um Referenzen...
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/
tuturutka
 2006-02-18 18:13
#63048 #63048
User since
2006-01-17
7 Artikel
BenutzerIn
[default_avatar]
Danke für dieTipps,ich werde nach einem Modul nachschauen, aber ich würde schon gerne wissen, woran diese komische Ausgabe liegt. Ich bin sehr dankbar, wenn jemand mir dabei helfen würde.
Danke
FIFO
 2006-02-18 20:57
#63049 #63049
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Hallo,

Wenn ich das richtig sehe, willst Du eine Iteration über das zweite anonyme Array in @multiarray machen. Dann müsste die Dereferenzierung so aussehen (ungeprüft):

Code: (dl )
1
2
3
    foreach my $elem ( @{ $multiarray [1] } ){
...
}


Gruß,
FIFO
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
renee
 2006-02-19 01:44
#63050 #63050
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=tuturutka,18.02.2006, 17:13]Danke für dieTipps,ich werde nach einem Modul nachschauen, aber ich würde schon gerne wissen, woran diese komische Ausgabe liegt. Ich bin sehr dankbar, wenn jemand mir dabei helfen würde.
Danke[/quote]
Die komische Ausgabe liegt daran, dass Du die Arrayreferenz nicht dereferenzierst (steht aber auch alles in perlreftut)...
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/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-02-17 18:21.