Thread best.Zeile + darauffolgende Zeilen löschen
(17 answers)
Opened by Gast at 2005-05-03 11:38
Erstmal dank an Ronnie, dass er meinen Code erklaert hat. 8)
Und dann @strat: Doch, ist schick. Aber sicherlich noch etwas unuebersichtlicher als meine Zeile. ;) @StefanJ: Sorry, fuer einen Perl-Einsteiger ist das sicher etwas heftig. Aber es sollte genau das machen, was du beschrieben hast, inkl. mehrfachem Auftreten von "NOID". Man kann das ganze auch vom Einzeiler in ein Programm umschreiben. Leider hast du nicht gesagt, wie dem Programm die Datei uebergeben werden soll. Unix- oder Linux-Shell-Anhaenger arbeiten gerne mit Pipes und Filtern, und dafuer sind so Perl Einzeiler ideal: Einlesen von STDIN (was Perl mit "-n" oder "-p" automatisch macht, und das auch, wenn ein Dateiname als Argument angegeben ist), STDOUT umleiten in andere Datei oder eine Pipe. So mache ich es auch meistens. Die meisten Windows-Programmierer tendieren eher dazu, Dateinamen entweder fest in den Code zu kodieren oder die Dateinamen als Argumente explizit einzulesen und auch explizit im Programm zu oeffnen (und zu schliessen). Schliesslich werden Programme (und auch Perlskripte) dort meist eher durch Anklicken gestartet als auf der Kommandozeile. Hier mein Code mal mit einkodierten Dateinamen, und auch mit Netz und Sicherheitsleine (strict und warnings): Code: (dl
)
1 #!/usr/bin/perl Wenn du die Zeilen in der Datei selber loeschen moechtest (d.h. ohne zusaetzliche Ausgabedatei), dann kannst du z.B. beim Einzeiler einen zusaetzlichen Parameter wie -i.bak benutzen, -i steht fuer "in place", mit .bak wird die alte Datei mit Endung .bak gesichert. (Tatsaechlich wird immer eine neue Datei erzeugt, aber diese dann mit .bak umbenannt, und die neue Datei bekommt den Namen der alten.) Wenn man wirklich ohne Datei zum Zwischenspeichern auskommen moechte, wird es etwas aufwaendiger, wie du schon gesehen hast. |