Siechfred: Namensliste mit Perl durchsuchen

Beitrag lesen

Tag Bastian.

open( DATEI, "<liste.txt" ) || die "Datei nicht gefunden";
while ( $zeile = <DATEI> )
{
  @NamenListe = "$zeile";
}

Besser wäre:

while( <DATEI> ) {  
  push @Namensliste, chomp($_);  
}

if !exists $NamenListe{'name'}
{
  // irgendwie Eintrag vornehmen
}

So geht es nicht, du hast ein Array, kein Hash definiert, das müsstest du noch über einen Hash-Slice erledigen:

my %Namen;  
@Namen{@NamensListe} = ();

Aber warum willst du die komplette Namensliste in ein Array schreiben, vergleiche doch beim Auslesen, ob es den Namen bereits gibt:

my $name = 'Pumpernickel';  
open( DATEI, "<liste.txt" ) || die "Datei nicht gefunden";  
my $seen = 1;  
while ( <DATEI> ) {  
  last if chomp($_) eq $name;  
  $seen = 0;  
}  
if($seen == 1) {  
  # gefunden  
}  
else {  
  print DATEI $name;  
}  
close DATEI;

(ungetestet, und schöner geht's bestimmt auch)

Und wie wäre es mir möglich, gezielt einen bestimmten Namen aus der Liste zu löschen? Auch wieder alles in ein Array einlesen, einen Eintrag aus dem Array löschen und damit die Datei überschreiben?

Das wäre wohl dann der einfachste Weg. Es gibt da noch das Modul Tie::File, das aber letztlich auch auf den Dateiinhalt via Array zugreift.

Mit welcher Funktion lösche ich einen Array-Eintrag?

Am elegantesten mit splice.

Siechfred

--
Früh übt sich ... (74kB)
Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.