Jer: Löschen von Listenelementen

Hi!
Hab da mal ne dumme Anfängerfrage:
Ich hab ne txt-Datei[Aufbau: "Name";"E_Mail";....], die ich als Hash einlesen möcht (1.wie mache ich das [ich weiss wie man den spass in ein Array schreibt aber bei nem Hash wills einfach nicht klappen, was ich auch probier]).
Anschließend möchte ich einträge hinzufügen (stellt kein weiteres Problem dar) bzw. auch löschen (2.wie mache ich das, ohne dass ich die Liste umsortieren und dann das letzte Element löschen muss)

Muchas Gratias für Antwort und Geduld

--
Jer

  1. Hi,

    Hab da mal ne dumme Anfängerfrage:
    Ich hab ne txt-Datei[Aufbau: "Name";"E_Mail";....], die ich als Hash einlesen möcht (1.wie mache ich das [ich weiss wie man den spass in ein Array schreibt aber bei nem Hash wills einfach nicht klappen, was ich auch probier]).

    bei nem Hash brauchst du einen Key. ich nehm einfach mal an,
    als Key wird der erste Wert der Zeile genommen.
    Dann waere das so:

    open(f1,"<$file") Fehlermeldung();
    while(<f1>) {
       chomp($_);
       ($key, $rest) = split(/;/,$_,2);
       if ($key) {
         $hash{$key} = $rest;
       }
    }
    close f1;

    Anschließend möchte ich einträge hinzufügen (stellt

    kein weiteres Problem dar) bzw. auch löschen (2.wie
    mache ich das, ohne dass ich die Liste umsortieren
    und dann das letzte Element löschen muss)

    bei nem hash alles kein problem:
    Hinzufuegen:
    $hash{'neuname'} = 'neuwert';

    Loeschen (einfach):
    $hash{$key} = "";

    Aber Achtung: Ein hash ist von sich aus nicht sortiert!!

    Wenn du es sortiert ausgeben willst (sortiert nach den Keys):

    foreach $key (sort keys %hash) {
      print "$key\t$hash{$key}\n";
    }

    Ciao,
      Wolfgang

    1. Hi,

      Hab da mal ne dumme Anfängerfrage:
      Ich hab ne txt-Datei[Aufbau: "Name";"E_Mail";....], die ich als Hash einlesen möcht (1.wie mache ich das [ich weiss wie man den spass in ein Array schreibt aber bei nem Hash wills einfach nicht klappen, was ich auch probier]).

      bei nem Hash brauchst du einen Key. ich nehm einfach mal an,
      als Key wird der erste Wert der Zeile genommen.
      Dann waere das so:

      open(f1,"<$file") Fehlermeldung();

      »»  while(<f1>) {

      chomp($_);
         ($key, $rest) = split(/;/,$_,2);
         if ($key) {
           $hash{$key} = $rest;
         }

      »»  }

      close f1;

      Anschließend möchte ich einträge hinzufügen (stellt
      kein weiteres Problem dar) bzw. auch löschen (2.wie
      mache ich das, ohne dass ich die Liste umsortieren
      und dann das letzte Element löschen muss)

      bei nem hash alles kein problem:
      Hinzufuegen:
      $hash{'neuname'} = 'neuwert';

      Loeschen (einfach):
      $hash{$key} = "";

      Aber Achtung: Ein hash ist von sich aus nicht sortiert!!

      Wenn du es sortiert ausgeben willst (sortiert nach den Keys):

      foreach $key (sort keys %hash) {
        print "$key\t$hash{$key}\n";
      }

      Ciao,
        Wolfgang

      Herzlichen Dank!!

    2. Hallo Wolfgang,

      Loeschen (einfach):
      $hash{$key} = "";

      So wird nur der Wert auf "" gesetzt,

      wenn man ein Element wirklich loeschen will sollte man

      delete $hash{$key};

      verwenden.

      Ciao,
        Wolfgang

      Gruss
         Kai

  2. Hallo,

    Hi!
    Hab da mal ne dumme Anfängerfrage:
    Ich hab ne txt-Datei[Aufbau: "Name";"E_Mail";....], die ich als Hash einlesen möcht (1.wie mache ich das [ich weiss wie man den spass in ein Array schreibt aber bei nem Hash wills einfach nicht klappen, was ich auch probier]).

    #!perl -w
    use strict;

    my %person;
    my @ary;

    Erstmal musst Du Dir ueberlegen, wie Deine Datenstruktur aussehen soll.
    Hier koenntest Du *z.B.* jedes Datenfeld als Key eines Hashes benutzen, also:

    $person{'name'}  = 'hans maier';
    $person{'email'} = 'hmaier@maier.de';

    Dann speicherst Du eine Referenz dieses Hashes in ein Array.
    push @ary, %person;

    Zugreifen kannst Du dann, u.a., so

    print $ary[0]->{'name'};

    oder

    print $ary[0]{'email'};

    Anschließend möchte ich einträge hinzufügen (stellt kein weiteres Problem dar) bzw. auch löschen (2.wie mache ich das, ohne dass ich die Liste umsortieren und dann das letzte Element löschen muss)

    loeschen eines Hash-Elements geht prinzipiell so:

    delete $person{'name'};

    perldoc -f delete

    ansonsten kann ich nur empfehlen:

    perldoc perlref
    perldoc perllol

    oder ueberhaupt

    perldoc perl

    Muchas Gratias für Antwort und Geduld

    --
    Jer

    Gruss
       Kai