/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Erstatning af strenge
Fra : Lars Bj.


Dato : 07-03-01 19:40

Hej Perl programmører,
Er der nogen med mere frisk Perl erfaring end jeg har, som kan hjælpe mig et
script som gennemløber alle tekstfiler med bestemt extension (nemlig .c) og
fjerner alle strenge som starter med sekvensen

/* xxx-id:

og slutter med

*/

mvh Lars Bj.

PS. det er lidt længe siden jeg har rodet med Perl, regulære udtryk,
filbehandling .. så en lidt hjælp er påskønnet).





 
 
Thomas Jespersen (07-03-2001)
Kommentar
Fra : Thomas Jespersen


Dato : 07-03-01 19:45

"Lars Bj." <lbj22@worldonline.dk> writes:

> Hej Perl programmører,
> Er der nogen med mere frisk Perl erfaring end jeg har, som kan hjælpe mig et
> script som gennemløber alle tekstfiler med bestemt extension (nemlig .c) og
> fjerner alle strenge som starter med sekvensen

Det er faktisk ikke helt simpelt, men et udgangspunkt kunne være:

perldoc -q comments


Peter Søgaard (08-03-2001)
Kommentar
Fra : Peter Søgaard


Dato : 08-03-01 10:44

Hej Lars,
Følgende kode gør det ønskede for alle .c filer i det directory filen køres
fra:

**********************************
opendir(DIR, ".");
@files = grep(/c$/, readdir(DIR));
closedir(DIR);

foreach $file (@files) {
open( INPUT_FILE, "<$file" );
open( OUTPUT_FILE, ">$file.new" );
while( <INPUT_FILE> ){
$inFile .= $_;
}
$inFile =~ s/\/\* xxx-id:.*?\*\///igs;
print OUTPUT_FILE $inFile;
close( INPUT_FILE );
close( OUTPUT_FILE );
unlink( $file );
rename( "$file.new",$file );
}
**********************************



Martin Moller Peders~ (08-03-2001)
Kommentar
Fra : Martin Moller Peders~


Dato : 08-03-01 11:19

In <987k1s$7ob$1@news.inet.tele.dk> "Peter Søgaard" <peter.s@tjgroup.dk> writes:

>Hej Lars,
>Følgende kode gør det ønskede for alle .c filer i det directory filen køres
>fra:

>**********************************
>opendir(DIR, ".");
>@files = grep(/c$/, readdir(DIR));

@files=grep(/\.c$/, readdir(DIR));
er bedre, da du ikke oensker at koere programmet paa en fil ved navn
abc og lign.

/Martin

Peter Søgaard (08-03-2001)
Kommentar
Fra : Peter Søgaard


Dato : 08-03-01 11:54


"Martin Moller Pedersen" <tusk@daimi.au.dk> skrev i en meddelelse
news:987m9m$1n9u$1@news.net.uni-c.dk...
> In <987k1s$7ob$1@news.inet.tele.dk> "Peter Søgaard" <peter.s@tjgroup.dk>
writes:
>
> >Hej Lars,
> >Følgende kode gør det ønskede for alle .c filer i det directory filen
køres
> >fra:
>
> >**********************************
> >opendir(DIR, ".");
> >@files = grep(/c$/, readdir(DIR));
>
> @files=grep(/\.c$/, readdir(DIR));
> er bedre, da du ikke oensker at koere programmet paa en fil ved navn
> abc og lign.
>
> /Martin

Ja, s'føli...min fejl



Thorbjørn Ravn Ander~ (08-03-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 08-03-01 11:13

"Peter Søgaard" wrote:
>
> Hej Lars,
> Følgende kode gør det ønskede for alle .c filer i det directory filen køres
> fra:
>
> **********************************
> opendir(DIR, ".");
> @files = grep(/c$/, readdir(DIR));
> closedir(DIR);
>
> foreach $file (@files) {
> open( INPUT_FILE, "<$file" );
> open( OUTPUT_FILE, ">$file.new" );
> while( <INPUT_FILE> ){
> $inFile .= $_;
> }
> $inFile =~ s/\/\* xxx-id:.*?\*\///igs;
> print OUTPUT_FILE $inFile;
> close( INPUT_FILE );
> close( OUTPUT_FILE );
> unlink( $file );
> rename( "$file.new",$file );
> }
> **********************************

Ovenstående kan formentlig (jeg har ikke en masse C filer at teste på)
udføres som

   perl -i.new -0777 -pe 's/\/\* xxx-id:.*?\*\///igs' *.c

(se "perldoc perlrun" for flagenes betydning)

Under Windows er det lidt mere bøvlet.

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408917
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste