Thread Zeile und Zeichen davor löschen
(5 answers)
Opened by Tobias at 2012-10-02 09:05
Du hast zwei Möglichkeiten.
1. Merke dir die letzte zeile und mache die Ausgabe um diese verzögert, dann hast du immer zwei Zeilen im Speicher, die du untersuchen kannst: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #!/usr/bin/perl # Perl hat Hilfen die das Programmieren vereinfachen. # diese beiden Zeilen laden Pragmas (Spezielle Module) # die umfangreichere Fehlermeldungen machen. # Perl ist damit nicht mehr so tolerant # gerade wenn man anfängt kann perl mit seinen # Variationsmöglichkeiten eher stören als helfen. use strict; use warnings; # es ist immer sinnvoll Fehlermeldungen zu machen die("Bitte Dateinamen angeben!\n") if(!@ARGV) # Den übergeben Dateinamen holen my $file=$ARGV[0]; # Datei öffnen und fehlermeldung wenn es nicht geklappt hat # $! enthält die Meldung von Perl oder dem System open(my $fh, '<', $ARGV[0]) or die("Can't open $file ($!)\n") #foreach (<>) { # for ist hier schlecht, # denn es ließt gleich die gesamte Datei ein # und geht sie dann zeilenweise durch. # bei while wird immer nur eine Zeile gelesen, das spart RAM # die alte Zeile: my $old_line=''; # datei Zeilenweise einlesen while(my $new_line=<$fh>) { if($new_line=/<Suchstring>/) { # letztes Zeichen löschen $old_line=~s/.\n$/\n/; # ganze Zeile löschen $new_line=''; } print $old_line; $old_line=$new_line; } close($fh); # noch die letzte Zeile ausgeben print $old_line; 2. Lese die gesamte Datei ein und ersetze alle in dieser (nur sinnvoll wenn man genügend Speicher hat): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #!/usr/bin/perl # Perl hat Hilfen die das Programmieren vereinfachen. # diese beiden Zeilen laden Pragmas (Spezielle Module) # die umfangreichere Fehlermeldungen machen. # Perl ist damit nicht mehr so tolerant # gerade wenn man anfängt kann perl mit seinen # Variationsmöglichkeiten eher stören als helfen. use strict; use warnings; # es ist immer sinnvoll Fehlermeldungen zu machen die("Bitte Dateinamen angeben!\n") if(!@ARGV) # Den übergeben Dateinamen holen my $file=$ARGV[0]; # Datei öffnen und fehlermeldung wenn es nicht geklappt hat # $! enthält die Meldung von Perl oder dem System open(my $fh, '<', $ARGV[0]) or die("Can't open $file ($!)\n") # die ganze Datei lesen. Kein Zeilentrenner. $/=undef; # alles in "$data" einlesen my $data=<$fh>; # Datei schließen close($fh); # alles "ENGINE=MyISAM" suchen # und durch "ENGINE=InnoDB" ersetzen $data=~s/ENGINE=MyISAM/ENGINE=InnoDB/gs; # alles <irgend ein zeichen>"\n"<irgendwas><SUCHSTRING><irgendwas>"\n" suchen # und durch "\n" ersetzen $data=~s/.\n.*?<SUSCHSTRING>.*?\n/\n/gs; print $data; Last edited: 2012-10-02 09:49:29 +0200 (CEST) |