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

Hash mit Arrays als Wert aufbauen (Seite 2)

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
vayu
 2007-02-22 16:45
#74509 #74509
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
das wär doch echtmal ne neuerung :)

n automatischer post à la:

Quote
this post was also seen here:

forum1

forum2
\n\n

<!--EDIT|vayu|1172155772-->
xtomcatx
 2007-02-22 16:54
#74510 #74510
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
@vayu:
Ich hab da im Prinzip ja auch nichts dagegen, ich habe das auch schon gemacht, wenn etwas wirklich dringend war, aber dann gebietet es doch die Höflichkeit, in den jeweiligen Foren auch Links auf die anderen zu setzen, dass sich die Arbeit nicht mehrmal gemacht wird und man nicht gegeneinander arbeitet.


@Strat:
Zu überlegen wäre das schon, aber es ist halt die Frage, ob das den Betreibern der anderen Foren recht ist, wenn regelmäßig ihre Seite abgefragt wird.
Wie Du an meiner Beitragszahl erkennen kannst, war ich hier bisher noch nicht wirklich aktiv und habe auch noch nichts von dem neuen Forum gewusst. Gibts da irgendwo genauere Infos?
Wieso sind beispielsweise Threads von 2003 bis September 2006 in dem Forum und seit wann wird an diesem gearbeitet? Oder sind das nur Testdaten aus dem bisherigen, um eine Datenmenge zu haben, mit der ihr arbeiten könnt?

Gruß Martin
Pida
 2007-02-22 17:04
#74511 #74511
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Sorry, das ist sonst nicht meine Art... leider war perl-community.de heute vormittag für längere Zeit nicht verfügbar, weshalb ich ausgewichen bin. Ein paar Minuten nach meinem Posting war die Seite dann wieder da...

Leider habe ich mir mit den Referenzen nun ein neues Problem geschaffen; ich hoffe, ihr guckt euch das nochmal an:

Wie ganz oben beschrieben, steht die Zeile

Code: (dl )
$liste{$index} = \@pro;

in einer Schleife. Es wird ein hash aufgebaut, der später wieder ausgelesen werden soll:

Code: (dl )
1
2
3
foreach my $index (@sort_keys_satzliste) {
print "$index @{$liste{$index}}\n";
}


Nun ist das Problem, dass bei der Ausgabe der Wert eines jeden Schlüssels identisch ist. An den jeweiligen @pro kann das nicht liegen, die habe ich zwischendurch testweise ausgegeben. Anscheinend wird für die Referenz bei jedem Schleifendurchlauf die gleiche Speicheradresse verwendet (und die alten Werte überschrieben), so dass das Ergebnis des letzten Durchlaufs später als Wert für jeden Schlüssel ausgegeben wird.

Die Indizes werden bei der Ausgabe aus einem anderen Array bezogen, daran liegt es nicht (getestet). Das sind jeweils Integer von 1-x.

Gibt es Abhilfe?

Danke, Pida
xtomcatx
 2007-02-22 17:14
#74512 #74512
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Anhand dessen, was Du als Infos gibst, kann man nur raten. Ich vermute, Dein Skript sieht so ähnlich aus:
Code: (dl )
1
2
3
4
5
6
my @pro;
foreach my $index (@sort_keys_satzliste)
{
@pro = <irgendwelchedaten>;
$liste{$index} = \@pro;
}


Und dann bist Du genau Da angekommen, was ich im Perlboard beschrieben habe, Du änderst den Wert von @pro. Die Referenz auf diese Adresse bleibt bestehen, aber Du änderst die Daten, die sich dort befinden.
Entweder Du änderst den Code dahin gehend ab:
Code: (dl )
1
2
3
4
5
foreach my $index (@sort_keys_satzliste)
{
my @pro = <irgendwelchedaten>;
$liste{$index} = \@pro;
}


oder Du verwendest einen HoA

Gruß Martin\n\n

<!--EDIT|xtomcatx|1172157312-->
Pida
 2007-02-22 17:22
#74513 #74513
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Vielen Dank Martin,

ich hatte da ein Brett vor'm Kopf und tatsächlich die privaten Variablen zu früh deklariert.

Gruß, Pida\n\n

<!--EDIT|Pida|1172157763-->
xtomcatx
 2007-02-22 18:01
#74514 #74514
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Ich würde dir trotzdem einen hoa empfehlen, weil Du diese arrays anscheinend nur temporär anlegst und Du so zusätzlichen Speicher durch die Referenzen benötigst. Zwar nur Kleinvieh, aber genug davon macht bekanntlich auch Mist.
Code: (dl )
1
2
foreach my $index (@sort_keys_satzliste)
{ @{$liste{$index}} = <irgendwelchedaten>; }

oder wenn Du lieber mit Referenzen arbeitest:
Code: (dl )
1
2
foreach my $index (@sort_keys_satzliste)
{ $liste{$index} = [<irgendwelchedaten>]; }

dann sparst du dir die Deklaration von @pro, die [] geben eine anonyme Referenz auf den darin befindlichen Array zurück. Anonym heißt, dass es den Array als solchen gar nicht gibt, er läßt sich nicht direkt ansprechen. Im Prinzip ist das bei deiner Lösung aber genauso, denn @pro verliert ja die Gültigkeit, sobald Du den Block verläßt.
Strat
 2007-02-22 18:13
#74515 #74515
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=xtomcatx,22.02.2007, 15:54]
zu überlegen wäre das schon ...
[/quote]
War nur ein Scherz.

ad neuem Forum:

ein paar Leute entwickeln eine neue Forensoftware, weil das Ikonboard fuer ein Programmierforum nicht optimal ist und manche Erweiterungen vielleicht etwas zu viel erweitert haben und suboptimal funktionieren. Der Stand ist, dass fuer die erste Version nur noch ein Messenger fehlt (ist mein Job, aber mir fehlt momentan etwas die Zeit), dann kann es voraussichtlich in Produktion gehen.

Das neue Forum verwendet eine SQL-Datenbank, das Ikonboard DB_File. Die Datenbank wird nur aktualisiert, wenn ich manuell eine Konvertierung anstosse; das letzte Mal habe ich das im September 2006 gemacht.

Vermutlich habe ich im April wieder mehr Zeit und kann dann hoffentlich die erste Version des Forums fertigstellen.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
xtomcatx
 2007-02-22 18:41
#74516 #74516
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Ahja, die enorm großen Seitenzahlen am Anfang der jeweiligen Foren würde ich vielleicht weglassen, ich empfinde die als ziemlich störend und unten sind sie ja nochmal. Aber das ist wahrscheinlich Geschmackssache.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-02-22 15:30.