Hi!
Ich ich folgendes Problem: (Quellcode siehe unten)
1.) Ich möchte einen User aus einer Datei "test.txt" löschen.
2.) Login steht jeweils in einer neuen Zeile.So nun, wie man unten erkennen kann wird die Datei geöffnet, usw...
(Quellcode nicht 100% von mir, sonst würde ich das nicht posten müssen)Was die Sache machen soll? Naja, eine bestimmte Zeile (Login) aus der
Datei löschen. (ein Login, eine Zeile)
Es gilingt mir aber nicht so recht, ausserdem löscht der unten stehende
Quellcode immer nur die erste Zeile ?!Könnte mir hier jemand den Fehler sagen, bzw. einen Tipp geben
wie das ander zu machen ist?Vielen Dank für jede Antwort!
MfG Thomas
####### Anfang der File ########
[...]sub remove {
open (data, "<test.txt") or &error("fehler");
@data=<data>;
close(data);
$count=0;
foreach $data(@data) {
$count++;
@datax=split(/:/, $data); # möchte nicht bei ":" splitten, sondern jeweils mit einer neuen Zeile
if ($INPUT{'test'} eq "@datax[0]" and $INPUT{'test'}== "@datax[0]") {
$count--;
splice (@data, $count, 1);
open (wdata, ">test.txt") or &error("fehler");
}
print wdata @data;
close(wdata);
print "User gelöscht.";
exit;
}[...]
######## EOF ############
Moin, moin,
ich würde es so lösen:
################
$datei = "test.txt";
$wert = "das_was_gelöscht_wird";
sub remove {
############
Datei öffnen, in Array einlesen, schließen
############
open(DATA,"$datei") die $!;
@data1 = <DATA>;
close(DATA);
############
Datei zum Schreiben öffnen,
Array zeilenweise abarbeiten und vergleichen ob $Wert vorkommt,
wenn ja, dann "next"
ansonsten die Zeile in die Datei schreiben
############
open(DATA,">$datei") die $!;
foreach $zeile (@data1)
{
chomp($zeile);
if($zeile eq "$wert") { next }
else { print DATA "$zeile\n" }
}
close(DATA);
open(DATA,"<$datei") die $!;
@data2 = <DATA>;
close(DATA);
print "User: $wert gelöscht";
}
#################
Grüße
Steffen D.