Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Perl: Zugriff auf Arrayelemente von Hashes

  1. #1
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Question Perl: Zugriff auf Arrayelemente von Hashes

    Hallo zusammen,

    ich möchte auf Elemente eines in einem Hash referenzierten Array zugreifen und diese abändern. Ich bin mir bei der Referenzierung noch nicht ganz sicher, wenngleich ich denke, dass mir der Sinn (man vergibt den Schlüssel eines Hashs und läßt den Wert auf ein Array zeigen > Pointer <) klar ist.

    Hier also Codefragmente wie ich den Hash/das referenzierte Array fülle:


    open (BB, $str_pfad_bb) or die "Konnte die Datei $str_pfad_bb nicht oeffnen: $!\n";
    while (<BB>) {
    chomp;
    @arr_hilf = split /;/,$_;
    $str_isin = $arr_hilf[0];
    $str_waehrung = $arr_hilf[1];
    $str_nominal = $arr_hilf[2];
    push( @{$hsh_liste_bb{$str_isin}},$str_waehrung );
    push( @{$hsh_liste_bb{$str_isin}},$str_nominal );
    push( @{$hsh_liste_bb{$str_isin}},$int_mtch_isin );
    push( @{$hsh_liste_bb{$str_isin}},$int_mtch_whrg );
    push( @{$hsh_liste_bb{$str_isin}},$int_mtch_nom );
    }
    close BB;


    Ich wuerde nun gerne die vorher gefüllten Elemente, z. B. $int_mtch_isin von ursprünglich 0 auf 1 abaendern. Kann mir hier jemand weiterhelfen?

    Gruß und Danke

    Stefan
    Dipl.-Ing.(FH) Forstwirtschaft
    Stefan Feeser

    https://familie-feeser.net

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Stefan Feeser
    Ich wuerde nun gerne die vorher gefüllten Elemente, z. B. $int_mtch_isin von ursprünglich 0 auf 1 abaendern. Kann mir hier jemand weiterhelfen?

    Gruß und Danke

    Stefan

    $int_mtch_isin = 1; # Sollte reichen
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    PHP-Code:
    use strict;
    use 
    warnings;
    use 
    Data::Dumper;

    # sowas hast Du in etwa nach dem Einlesen Deiner Werte:
    my %Hash=();
    push(@{$Hash{'key1'}},'element1');
    push(@{$Hash{'key1'}},'element2');
    push(@{$Hash{'key1'}},'element3');
    push(@{$Hash{'key2'}},'element1');
    push(@{$Hash{'key2'}},'element2');
    push(@{$Hash{'key2'}},'element3');

    print 
    Dumper \%Hash;

    # Um nun bestimmte Daten zu ändern, musst Du [b]de[/b]referenzieren,  so:
    $Hash{'key1'}->[2] = 'ein neuer Wert';
    print 
    Dumper \%Hash;

    # oder so:
    @{$Hash{'key1'}}[2] = 'wieder ein neuer Wert';
    print 
    Dumper \%Hash
    siehe dazu auch perldoc perlref

    Wichtig ist evtl. noch, dass push() das neue Element immer hinten an die Liste hängt. Sollte die Anzahl der Arrayelemente nicht bei jedem Datensatz identisch sein, kannst Du später nicht mehr sicherstellen, dass sich hinter dem Index[4] auch wirklich der Wert befindet, den Du erwartest.

    In dem Fall empfiehlt sich dann vermutlich eher die Verwendung eines HashOfHashes statt eines HashOfArrays...

    hth, Michael

  4. #4
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Thumbs up Thx

    Hallo Ihr Beiden,

    vielen Dank für die Infos. Ich denke, dass die Antwort von Michael genau das ist, was ich brauche.

    Gruss

    Stefan
    Dipl.-Ing.(FH) Forstwirtschaft
    Stefan Feeser

    https://familie-feeser.net

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Kurz noch zur Effektivität (macht dasselbe wie dein Code):

    Code:
    open (BB, $str_pfad_bb) or die "Konnte die Datei $str_pfad_bb nicht oeffnen: $!\n";
    while (<BB>) {
      chomp;
      ($str_isin,$str_waehrung,$str_nominal,$rest) = split/;/;
      push(@{$hsh_liste_bb{$str_isin}},($str_waehrung,$str_nominal,$int_mtch_isin,$int_mtch_whrg,$int_mtch_nom));
    }
    close BB;
    Perl kann ja sehr effektiv programmiert werden. Natürlich ist das alles eine Frage des Verständnisses und dein Code ist einfacher zu lesen. Allerdings gibt man meiner Meinung nach auch einen Teil der Mächtigkeit von Perl auf, wenn man seine "Emphatie" nicht nutzt.

  6. #6
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Thomas Engelke
    Kurz noch zur Effektivität (macht dasselbe wie dein Code):

    Allerdings gibt man meiner Meinung nach auch einen Teil der Mächtigkeit von Perl auf, wenn man seine "Emphatie" nicht nutzt.
    Jeder will der Beste sein.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  7. #7
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Question Emphatie???

    Hi,

    das man besser alle Elemente des Arrays auf einmal hinzufügt um effizienter Code zu erhalten verstehe ich. Was ist aber "Emphatie" . Könnt Ihr das vielleicht mal kurz erklären/definieren?

    Gruß

    Stefan

  8. #8
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Zitat Zitat von Stefan Feeser
    das man besser alle Elemente des Arrays auf einmal hinzufügt um effizienter Code zu erhalten verstehe ich. Was ist aber "Emphatie" . Könnt Ihr das vielleicht mal kurz erklären/definieren?
    Der Satz "Perl ist nicht wie andere Sprachen" ist wahrscheinlich, obwohl man die meisten Sprachen einsetzen kann, fast für Perl erdacht worden. Ich will da nicht zu sehr in's Detail gehen. Perl ist z.B. üblicherweise sehr gut darin, dir zu sagen, was du eigentlich machen wolltest, wenn du beispielsweise Fehler in deinem Quelltext hast.

    Vieles an Perl ist leicht mystisch angehaucht, was meist auf seinen Erfinder Larry Wall zurückzuführen ist. Nur Perl-Entwickler laufen mit einem leichten Grinsen auf dem Gesicht herum. Und meine Kollegen gehen immer wieder verblüfft aus meinem Raum, wenn ich in Perl mal wieder in 7 Zeilen gelöst habe, wofür sie sonst 3 Stunden gebraucht hätten.

    Bei Bedarf: Ein paar Zitate von Larry.

    TME

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •