perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 08:24

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragzeilen löschen
Seitenanfang
hi,

ich habe einen ordner, in dem liegen mehrere dateien. ein perl script soll nun jede datei auf einen string durchsuchen, die zeile mit dem string löschen und die datei in einen neuen ordner schreiben. leider schreibt mir mein script nur eine leere datei. vielleicht kann mir ja jemand helfen.

hier mein script:

use strict;

print "Nach welchem Begriff suchen?\n";
my $string = <STDIN>; #zu suchender String
print "Ab welcher Zeile schreiben?\n";
my $lineNumber = <STDIN>;

# Verzeichnis öffnen und Anzahl *.txt zählen
opendir(DIR,"Daten/alt/");
my @eintraege = readdir(DIR);
closedir(DIR);
my $anzahl = @eintraege;

# alle *.txt der Reihe nach öffnen...
my $n = 0;
for ($n = 2 ; $n < $anzahl + 1 ; $n++)
{
my $filename = $eintraege[$n];
my @output;
my $count = 0;
open(DATEI2,">Daten/neu/$filename");
open (DATEI,"Daten/alt/$filename");
while (!eof (DATEI))
{
next if ($_ = /$string/);
$count++;
if ($count >$lineNumber)
{
print DATEI2 $_;
}
}
close DATEI;
close DATEI2;
}

Datum: 28.11.2007-12:04

Beitragre: zeilen löschen
Seitenanfang
Fragen und Anmerkungen die dir bei der Fehlersuche eventuell behilflich sein koennten:

i) An welcher Stelle liest du aus der Ursprungsdatei?

ii) Beendet sich dein Script ueberhaupt?

iii) Anmerkung: Die folgende Codezeile wendet zuerst den regulaeren Ausdruck '/$string/' auf $_ an und weist das Ergebnis der Mustererkennung (boolisch 'wahr' oder 'falsch') der Variablen $_ zu.


next if ($_ = /$string/);

Ausfuehrlicher geschrieben

next if ($_ = $_ =~ /$string/);

vermutlich wolltest du aber nur

next if ($_ =~ /$string);

also ohne dass $_ noch einmal das Ergebnis der Mustererkennung zugewiesen wird.

iv) Immer pruefen ob die Ausfuehrung einer Funktion, insbesondere bei 'open', erfolgreich gewesen ist:


open(DATEI2,">Daten/neu/$filename") or die "Konnte Datei nicht zum Schreiben oeffnen: $!\n";

Datum: 28.11.2007-17:32

-






-
-