Schrift
[thread]6977[/thread]

suchen und erstzen in datei



<< >> 6 Einträge, 1 Seite
norman
 2005-05-10 13:21
#54723 #54723
User since
2004-03-11
46 Artikel
BenutzerIn
[default_avatar]
hallo zusammen,

habe folgendes problem:
1. datei öffnen
2. suchen und erstzen eines teil des inhalts
3. datei schreiben

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## datei öffnen
my $template = 'test.txt';
my @ausgabe;

open(DATEI, "$template") || die "$template nicht gefunden";
my @ausgabe = <DATEI>;
close(DATEI);

## suchen , ersetzen
my $text = join("",@ausgabe);
$text =~ s/<!--te.+?st-->//g;


## ausgabe
my $fileout = 'test2.txt';

open(FILEOUT, ">$fileout") || die "Kann $fileout nicht schreiben!";
print FILEOUT $text;
close(FILEOUT);


alles ab <!--test 1.3.0 --> und bis <!-- /test--> soll ersetzt werden. die datei, die geöffnet wird, sieht so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
blabla

<!--test 1.3.0 -->
<script language="Javascript" type="text/javascript">
</script>
<noscript>
</noscript>
<!-- /test-->

blabla


könnte es bei dem regulären ausdruck probleme mit den zeilenumbrüchen geben?

viele grüße
norman
Thorium
 2005-05-10 14:11
#54724 #54724
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja... s/// sucht normalerweise innerhalb einer Zeile.
Mit der Option s///s kannst du "." anweisen auch "\n" zu finden.
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
norman
 2005-05-10 14:19
#54725 #54725
User since
2004-03-11
46 Artikel
BenutzerIn
[default_avatar]
Danke! Das war es...
Strat
 2005-05-10 14:31
#54726 #54726
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
eventuell; normalerweise matcht . nicht auf zeilenumbruch. Du kannst dem regulaeren Ausdruck aber sagen, dass . auch auf einen zeilenumbruch matchen soll, indem du als parameter /s dranhaengst... z.B:
Code: (dl )
$text =~ s/<!\-\-te.+?st\-\->//gs;

Aufpassen beim -, der gibt normalerweise einen bereich von...bis an. den am besten escapen

ein anderer weg, das ergebnis zu erzielen, waere:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my $text = do {
 open (DATEI, "<", $template) or
   die "Error: couldn't open '$template': $!\n";

 # die folgende zeile bewirkt, dass der komplette string in eine
 # zeile eingelesen wird; so sparst du dir das join
 local $/ = undef;
 my $temp = <DATEI>; # alles in eine "zeile"
 close (DATEI);
 $temp; # wird aus do-Block herausgegeben => $text
};

# ersetzen
$text =~ s/<!\-\-te.+?st\-\->//gs;

# in datei schreiben
open(FILEOUT, ">", $fileout) or die "Kann '$fileout' nicht schreiben: $!\n";
print FILEOUT $text;
close(FILEOUT);
\n\n

<!--EDIT|Strat|1115721105-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2005-05-10 16:54
#54727 #54727
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=Strat,10.05.2005, 12:31]
Code: (dl )
$text =~ s/<!\-\-te.+?st\-\->//gs;

Aufpassen beim -, der gibt normalerweise einen bereich von...bis an. den am besten escapen[/quote]
Nur, wenn es in einer Zeichenklasse (und dort nicht am Anfang) vorkommt.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2005-05-10 17:54
#54728 #54728
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Crian: stimmt... war da immer zu vorsichtig... wieder was gelernt
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 6 Einträge, 1 Seite



View all threads created 2005-05-10 13:21.