OVH Cloud OVH Cloud

expressions régulières

4 réponses
Avatar
Kurts
bonjour,

c'est mon premier post ici car je commence à peine avec perl.
auusi, soyez indulgents !


donc ma question :

dans un fichier texte, je voudrais ajouter un ";" à la fin des lignes qui
commencents par "toto" (par exemple). jusque la, ca va à peu prés. mais, et oui
il y a un "mais", certaines lignes ont la structure suivante :

toto bla bla bla bla blabla // commentaires

et bien sur dans ce cas, il faut ajouter le ";" aprés le "blabla" mais avant le
"//" et la je ne vois même pas comment c'est possible.

si vous pouvez m'aider...
merci

4 réponses

Avatar
tyoup
Kurts wrote:

dans un fichier texte, je voudrais ajouter un ";" à la fin des lignes qui
commencents par "toto" (par exemple). jusque la, ca va à peu prés. mais, et oui
il y a un "mais", certaines lignes ont la structure suivante :

toto bla bla bla bla blabla // commentaires

et bien sur dans ce cas, il faut ajouter le ";" aprés le "blabla" mais avant le
"//" et la je ne vois même pas comment c'est possible.

si vous pouvez m'aider...
merci


while(<>) {
s#(//|$)#;$1# if /^toto/;
print;
}

--
Tyoup

Avatar
Kurts
In article <c1svn7$vns$, tyoup
wrote:
while(<>) {
s#(//|$)#;$1# if /^toto/;
print;
}



merci pour ta réponse si rapide !!!!

bon j'ai pas encore tout compris mais ca marche presque...

voila mon script, (le tout premier !!!!) :
---------------------------------------------------------------------------
#$originalfile = "dini2.pov";
$originalfile = $ARGV[0];
$modifiedfile = "temp.txt";

open(inFile,"< $originalfile");
open(outFile,"> $modifiedfile");

while (<inFile>) {
s#(//|$)#;$1# if /^s*#declare/;
print;
print (outFile);
}
close(outFile);
close(inFile);

$tempname = $originalfile;
$tempname =~ s/.pov/.old/;

rename $originalfile,$tempname ;
rename $modifiedfile,$originalfile;

print ("nscript stop here !nn");
---------------------------------------------------------------------------


deux cas posent problèmes :

1. ligne originale : #declare a=1;
ligne modifiée : #declare a=1;; <- 2 fois le ";"

2. ligne originale : #declare a=1 // blabla
ligne modifiée : #declare a=1 ;// blabla
ligne souhaitée : #declare a=1; // blabla

désolé de t'embéter encore

merci encore

Avatar
Kurts
In article <c1vsql$oim$,
Michel Rodriguez wrote:

Salut,

Bon, ben au detail pres que le fichier d'origine sera sauve comme
<nom_original>.old, ca peut s'ecrire en une seule ligne:

perl -i.old -p -e's{;?(s*($|//))}{;$1} if( m{^#declare})'

quelques explications:

fait perldoc perlrun ou man perlrun ou va voir la doc en francais a
http://www.enstimac.fr/Perl/DocFr.html pour les explications sur les
options -i -p et -e

sinon la substitution expliquee (elle agit sur $_, qui contient la ligne
courante):
s{;? # un ; optionel (pour eviter de le dupliquer)
( # on commence a capturer dans $1
s* # des espaces (0 ou plus)
($|//) # la fin de ligne ($) ou //
) # fin de la capture
}
{;$1}x # on remplace par la chaine capturee, pour remettre les
# espaces et/ou //
# l'option x permet de commenter les expressions

# regulieres

de meme if( m{^#declare}) matche #declare en debut de ligne (^)

C'est plus clair?


oui !!!

super merci.

Avatar
Michel Rodriguez
Salut,

Bon, ben au detail pres que le fichier d'origine sera sauve comme
<nom_original>.old, ca peut s'ecrire en une seule ligne:

perl -i.old -p -e's{;?(s*($|//))}{;$1} if( m{^#declare})'

quelques explications:

fait perldoc perlrun ou man perlrun ou va voir la doc en francais a
http://www.enstimac.fr/Perl/DocFr.html pour les explications sur les
options -i -p et -e

sinon la substitution expliquee (elle agit sur $_, qui contient la ligne
courante):
s{;? # un ; optionel (pour eviter de le dupliquer)
( # on commence a capturer dans $1
s* # des espaces (0 ou plus)
($|//) # la fin de ligne ($) ou //
) # fin de la capture
}
{;$1}x # on remplace par la chaine capturee, pour remettre les
# espaces et/ou //
# l'option x permet de commenter les expressions

# regulieres

de meme if( m{^#declare}) matche #declare en debut de ligne (^)

C'est plus clair?

--
Michel Rodriguez
Perl &amp; XML
http://www.xmltwig.com