Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9188[/thread]

3-dimensionales Array



<< >> 9 Einträge, 1 Seite
weperl
 2007-07-13 16:38
#78453 #78453
User since
2005-12-23
20 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte die Werte von 3 verschiedenen Variablen
in ein 3-dimensionales Array schreiben - krieg's aber
nicht hin.
Kann jemand helfen?

Gruß
Werner
pktm
 2007-07-13 16:47
#78454 #78454
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;
use Data::Dumper qw/Dumper/;

my $array_ref = [];
$array_ref->[0]->[1]->[2] = 'inhalt';

print Dumper $array_ref;
http://www.intergastro-service.de (mein erstes CMS :) )
weperl
 2007-07-13 17:31
#78455 #78455
User since
2005-12-23
20 Artikel
BenutzerIn
[default_avatar]
Hallo pktm,

zunächst dankeschön für deine prompte Antwort.
Könntest Du mir noch ein kurzes praktisches Beispiel
für den Einsatz des 3-dimensionalen Arrays mitteilen?

Ich habe nur Abstürze bei der Programmausführung!

Gruß
Werner
weperl
 2007-07-13 18:51
#78456 #78456
User since
2005-12-23
20 Artikel
BenutzerIn
[default_avatar]
Hallo pktm,

was ist falsch an meinem Code?
----------------------------------------------
#!/usr/bin/perl -w

use strict;
use warnings;
use Data::Dumper qw/Dumper/;

my $array_ref = [];
$array_ref->[0]->[1]->[2] = 'Buch','Titel', 'Verfasser';

print Dumper $array_ref;

my $stop = <STDIN>;

--------------------------

Gruß
Werner
renee
 2007-07-13 19:04
#78457 #78457
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
$array_ref->[0]->[1]->[2] = 'Buch','Titel', 'Verfasser'; diese Zeile ist falsch...

Keine Ahnung, was hier gemacht werden soll...
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/
pktm
 2007-07-13 19:06
#78458 #78458
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Mein Code spricht ein dreidimensionales Array an. D.h. es ist ein Array, welches wiederum an jeder Position ein Array enthält, welches wieder ein Array enthält. Das kann man sich so als dreidimensionales schachfeld vorstellen. An jeder Position gibt es genau 1 Figur, aber um an diese Figur zu kommen brauchst du 3 Koordinaten.

Du möchtest scheinbar ein Konstrukt, welches in diesen Feldern die Dinger wie Buch, Titel und Verfasser enthält.
Dazu brauchst du entweder ein zweidimensionales Array:
Code: (dl )
1
2
3
4
5
6
my $array_ref = [];
my @array2 = (qw/Buch Titel Verfasser/);
$array_ref[0] = \@array2;

# gib das Buch aus:
print $array_ref->[0]->[0];


Oder einen Hash, wenn du die Sachen nicht über Zahlen ansprechen möchtest:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my %hash = ();
$hash{buch} = {verfasser => 'niemand', titel => 'das nichtexistente buch'};

# gibt den titel des Datensatzes aus
my $buch = 'buch';
print $hash{$buch}->{titel};

# besser: abfangen, falls das bcuh nicht drin steht:
if( exists $hash{$buch} ) {
print Dumper $hash{$buch};
}


Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
RPerl
 2007-07-13 21:51
#78459 #78459
User since
2006-11-26
384 Artikel
BenutzerIn

user image
@ weperl: Der -w Schalter in der shebang ist unnoetig. Das use warnings sollte genuegen.
Bitte die code-tags benutzen. [*code*]...[/*code*] (ohne die Sternchen)

Nur mal so angemerkt! :)

Danke und Gruß,

rPerl
topeg
 2007-07-13 22:38
#78460 #78460
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Beispiel für ein dreidimensonales Array.

Code (perl): (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# meine (sehr) kleine Buchverwaltung

my @buecher=();

sub add_buch($$)
{
  my ($autor,$titel)=@_;

  # Bitte nur Strings und anonyme Arrays:
  return -1 if( ref($autor) ne '' and ref($autor) ne 'ARRAY' );

  # Bitte nur Strigs als Buchtitel:
  return -1 if(ref($titel) ne '');

  # Das Buch hinzufügen
  push(@buecher,[$autor,$titel]);
 
  # die ID des Buches Zurückliefern
  my $refid=$#buecher;
  return $refid;
}

sub get_titel($)
{
  my $refid=shift(@_);
  return $buecher[$refid][1];
}

sub get_autor($)
{
  my $refid=shift(@_);
  # Bibt es mehrer Autoren?-->; Der eintrag ist ein Array
  if(ref($buecher[$refid][0]) eq 'ARRAY')
  { return $buecher[$refid][0][0]; }
  else
  { return $buecher[$refid][0]; }
}

sub get_coautoren($)
{
  my $refid=shift(@_);
  # Bibt es mehrer Autoren?-->; Der eintrag ist ein Array
  if(ref($buecher[$refid][0]) eq 'ARRAY')
  {
    my @coautoren=@{$buecher[$refid][0]};
    shift(@coautoren); # der erste Eintrag ist der Autor
    return join(',',@coautoren);
  }
  else
  { return 'keine Eingetragen'; }
}

# ein Buch mit Titel und Autor hinzufügen:
my $id_a=&add_buch('Lois McMaster', 'Cetaganda');
# Da kommt ein Zweidimensionales Array heraus...

# Ein Buch  mit Titel, Autor udn Coautoren hinzufügen:
my $id_b=&add_buch(['Terry Patchett','Ian Stewart','Jack Cohen'],'Die Gelehrten der Scheibenwelt');
# Das anonyme Aarray mit den Autornamen macht das Array dreidimensional

# das Array siht nun so aus:
print "-"x20,"\n";
print "Struktur:\n".Dumper(\@buecher)."\n";
print "-"x20,"\n";

# und nun die Ausgaben:
print "-"x20,"\n";
print " Buch:        ".get_titel($id_a)."\n Autor:       ".get_autor($id_a)."\n Coautor(en): ".get_coautoren($id_a)."\n";
print "-"x20,"\n";
print " Buch:        ".get_titel($id_b)."\n Autor:       ".get_autor($id_b)."\n Coautor(en): ".get_coautoren($id_b)."\n";
print "-"x20,"\n";


Ausgabe:
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
--------------------
Struktur:
$VAR1 = [
[
'Lois McMaster',
'Cetaganda'
],
[
[
'Terry Patchett',
'Ian Stewart',
'Jack Cohen'
],
'Die Gelehrten der Scheibenwelt'
]
];

--------------------
--------------------
Buch: Cetaganda
Autor: Lois McMaster
Coautor(en): keine Eingetragen
--------------------
Buch: Die Gelehrten der Scheibenwelt
Autor: Terry Patchett
Coautor(en): Ian Stewart,Jack Cohen
--------------------
weperl
 2007-07-15 18:19
#78461 #78461
User since
2005-12-23
20 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

dankeschön für eure Hilfe. Wie ich sehe, muss ich noch eine
Menge lernen. Ich bemühe mich jedenfalls!

Grüße an alle von
Werner
<< >> 9 Einträge, 1 Seite



View all threads created 2007-07-13 16:38.