Schrift
[thread]12919[/thread]

EOL suchen und ersetzen

Leser: 1


<< >> 7 Einträge, 1 Seite
Vermillion
 2008-12-18 12:46
#117342 #117342
User since
2008-07-18
24 Artikel
BenutzerIn
[default_avatar]
Ich möchte ein Script schreiben dass einen Text einliest und dann ein EOL durch ein Zeichen (<br>) ersetzt. (Möchte also ein Dokument "Webtauglich" machen).

Das habe ich bis jetzt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

print "Bitte geben Sie die Datei an.\n";
my $Datei = <STDIN>;
chomp($Datei);

open (IN,"$datei") or die "Fehler beim oeffnen";
open (OUT,">new_content.txt") or die "Fehler beim Anlegen der neuen Datei";
print "\nDateien zum kopieren geoeffnet\n";
while (<IN>){
        $i = $_;
        #Nach EOL suchen und ersetzen
        print OUT $i."\n";
}
close (IN);
close(OUT);


Wie würdet ihr nach EOL suchen und das dann ersetzen? Hab gegoogelt aber nicht viel zum Thema EOL in Perl gefunden...
pq
 2008-12-18 13:08
#117343 #117343
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
EOL?? du meinst ein newline/zeilenende oder was?
Code (perl): (dl )
$string =~ s/\r?\n|\r/<br>/g;

edit: meine regex funktioniert für dokumente, die auf nem mac, auf windows oder auf linux
erstellt wurden.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2008-12-18 13:13
#117344 #117344
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Das Regex von pq ist natürlich sinnvoller, wenn Dateien zwischen verschiedenen Betriebssystemen ausgetauscht werden müssen.

Wenn das Skript auf dem selben Betriebssystem läuft wo die einzulesende Datei erstellt ist, sollte mein Beispiel passen.
GwenDragon
 2008-12-18 13:07
#117345 #117345
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Was verstehst du unter einem EOL?
Du meinst Linefeed oder Carriage Return?

Es kommt ja auf das System an, welches das Zeilenende ist.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use strict;
use warnings;

print "Bitte geben Sie die Datei an.\n";
my $in_file_name = <STDIN>;
chomp( $in_file_name );

my $out_file_name = "new_content.txt";

open( my $infh, "<", $in_file_name) or die "Fehler beim Oeffnen von $in_file_name";
open( my $outfh, ">", $out_file_name ) or die "Fehler beim Anlegen der neuen Datei $out_file_name";
print "\nDateien zum kopieren geoeffnet\n";
local $/; # enable localized slurp mode
my $content = <$infh>;
$content =~ s/$/<br>/gm;
print $outfh $content;
close( $infh ) or die "Fehler beim Schliessen von $in_file_name";
close( $outfh ) or die "Fehler beim Schliessen von $out_file_name";

1;


Zeile 13: wird der Eingabetrenner (siehe perldoc perlvars) ausgeschaltet
Zeile 14: und die Zeilen werden in einem Rutsch nach $content gelesen
Gast Gast
 2008-12-18 13:21
#117346 #117346
So würde doch der Umbruch erhalten Bleiben.
Code (perl): (dl )
$string =~ s/(?=\r?\n|\r)/<br>/g;
GwenDragon
 2008-12-18 13:28
#117347 #117347
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Ach so ist das gemeint, es sollte eine einzige Zeile werden.
Vermillion
 2008-12-18 13:57
#117348 #117348
User since
2008-07-18
24 Artikel
BenutzerIn
[default_avatar]
Die Daten kommen von einem Linux oder einem Windowsrechner.
Ja ich meinte Newline/Linefeed und ja eigentlich sollte schlussendlich alles auf einer Zeile stehen (also Newline/Linefeed weg und dafür ein <br> rein).

Hatte mich ein wenig unklar ausgedrückt entschuldigung...
<< >> 7 Einträge, 1 Seite



View all threads created 2008-12-18 12:46.