Löschen von Listenelementen
Jer
- perl
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
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
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!!
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
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