Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/05/2009, à 10:09

loudvig

Suppresion de commentaires

Bonjour,
Je cherche à supprimer les commentaires dans un programme, j'ai réussi avec sed mais il supprime toutes les lignes ou se trouve /* ... */

Dans mon programme j'ai parfois des commentaires au début de la ligne puis la suite de la ligne sans commentaire, dans ce cas la il faudrai uniquement supprimer la partie entre /* et */
De meme pour les commentaire sur plusieurs lignes.

Exemple à traiter :

/* ligne de commentaire */
/* ancien code */ nouveau code
/* commentaire
sur plusieurs
lignes */ suite du code...

C'est possible avec sed ou il faut que je cherche a faire ça avec perl ou awk?

#2 Le 07/05/2009, à 10:21

Peck

Re : Suppresion de commentaires

Tu ne dis pas quel langage, donc ca ne va pas être facile.
D'autre part, la syntaxe précise des commentaire peut être assez tricky et multiligne, exemple :
/* texte1 /* texte2 */
/* // texte3 */
texte4 */

C'est faisable en perl multiligne si tu n'est pas trop regardant sur les cas particuliers.

Hors ligne

#3 Le 07/05/2009, à 10:28

loudvig

Re : Suppresion de commentaires

Salut!
Le script va servir pour des programmes C/C++
Les commentaires // sont déja traités,
je voudrais juste trouver une commande (sed, perl, awk...) qui quand elle trouve /* supprime tout le texte trouvé jusqu'a rencontrer */
Ca fonctionnerai comme ça non?

#4 Le 07/05/2009, à 10:41

Totor

Re : Suppresion de commentaires

Bonjour,

Oui, c'est possible avec sed.
Ceci devrait faire l'affaire (par contre, je n'ai pas testé car pas trop le temps).
Enlève l'option "-i" pour tes test.

sed -i 's#/\*.*\*/\(.\+\)#\1#' fichier
sed -i '/\/\*/,/\*\// d' fichier

Dernière modification par Totor (Le 07/05/2009, à 10:44)


-- Lucid Lynx --

Hors ligne

#5 Le 07/05/2009, à 10:51

loudvig

Re : Suppresion de commentaires

Merci
Je viens de tester et ça à l'air de fonctionner
A quoi sert la 2eme commande sed?

#6 Le 07/05/2009, à 11:00

Totor

Re : Suppresion de commentaires

La première permet de gérer le cas :

/* ancien code */ nouveau code

La seconde de traiter les cas :

/* ligne de commentaire */
/* commentaire
sur plusieurs
lignes */

en fait, elle supprime toute les lignes à partir de celle contenant /* jusqu'à celle contenant */ (donc potentiellement la même ligne)


-- Lucid Lynx --

Hors ligne

#7 Le 07/05/2009, à 11:07

loudvig

Re : Suppresion de commentaires

Ok, merci pour les explications et pour la rapidité a laquelle tu m'as aidé big_smile

#8 Le 07/05/2009, à 11:16

Peck

Re : Suppresion de commentaires

Attention, la commande sed ne gère pas le cas
/* commentaire
*/ code

Hors ligne

#9 Le 07/05/2009, à 11:47

loudvig

Re : Suppresion de commentaires

Ah oui effectivement je viens de tester et ça supprime les deux lignes (donc la partie ou il y a du code)
Ce genre de commentaire est assez rare je pense mais si vous avez une idée pour gére ce cas je suis preneur wink
Merci

#10 Le 07/05/2009, à 13:32

Totor

Re : Suppresion de commentaires

en modifiant juste la 1ère commande :

sed -i 's#^\(.*\*/\)\(.\+\)#\1\n\2#' fichier
sed -i '/\/\*/,/\*\// d' fichier

par contre, ça ne gère pas le cas : <commentaire><code><commentaire>...

Dernière modification par Totor (Le 07/05/2009, à 14:55)


-- Lucid Lynx --

Hors ligne

#11 Le 07/05/2009, à 16:13

Peck

Re : Suppresion de commentaires

Mais le problème n'est toujours pas réglé pour les commentaires multilignes smile

Hors ligne

#12 Le 07/05/2009, à 17:05

Totor

Re : Suppresion de commentaires

Les 2 premières lignes permettent de remplacer <code>/* par <code><saut de ligne>/* et */<code> par */<saut de ligne><code>
Le multi ligne est géré par sed -i '/\/\*/,/\*\// d' fichier !

sed -i 's#^\(.\+\)\(\/\*.*)#\1\n\2#' fichier
sed -i 's#^\(.*\*/\)\(.\+\)#\1\n\2#' fichier
sed -i '/\/\*/,/\*\// d' fichier

-- Lucid Lynx --

Hors ligne

#13 Le 15/05/2009, à 15:45

loudvig

Re : Suppresion de commentaires

Rebonjour les gens!
Encore moi et mes problèmes de commentaires...
J'utilisais deux commandes sed que totor a donné ici :

sed 's#/\*.*\*/\(.*\)#\1#' fichier | sed '/\/\*/,/\*\// d' > fichiersanscom

et je viens de m'apercevoir d'un problème,

sur un morceau de code comme ceci :

info1,
info2,
info3,
info4/*,
info_com*/
code...

J'obtiens :

info1,
info2,
info3,
code...

Il supprime toute la ligne surlaquelle le commentaire démarre alors qu'il faudrai garder "info4" qui n'est pas en commentaire.
Comment gérer cela?

#14 Le 15/05/2009, à 16:43

Peck

Re : Suppresion de commentaires

Simplifie toi la vie, fais ca en perl, ca traite tous les cas d'un coup :

perl -ne '$a.=$_; END{$a=~ s|/\*.*?\*/||gms; print $a;}'

Hors ligne

#15 Le 15/05/2009, à 17:19

loudvig

Re : Suppresion de commentaires

Peck a écrit :

Simplifie toi la vie, fais ca en perl, ca traite tous les cas d'un coup :

perl -ne '$a.=$_; END{$a=~ s|/\*.*?\*/||gms; print $a;}'

Merci merci!!
Je viens de tester sur pas mal de cas et ça a l'air de bien fonctionner!
big_smile

#16 Le 08/06/2009, à 21:55

hardball

Re : Suppresion de commentaires

perl -0777pe 's#/\*.*?\*/##gms'

Dernière modification par hardball (Le 10/06/2009, à 22:11)


-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne

#17 Le 10/06/2009, à 19:47

geenux

Re : Suppresion de commentaires

Ouah, il faut définitivement que je me mette au perl moi. Ça fait un moment que je me dit ça, mais quand je vois la concision des expressions régulières, ça donne envie, plutôt que de le faire en c++...

Hors ligne

#18 Le 10/06/2009, à 20:29

HP

Re : Suppresion de commentaires

Perso, je fais ce genre de trucs en Python… c'est plus long qu'en Perl, apparemment…
mais bon…


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#19 Le 11/06/2009, à 04:58

noska

Re : Suppresion de commentaires

hardball a écrit :
perl -0777pe 's#/\*.*?\*/##gms'

Je comprends bien pourquoi tu as les "modificateurs" g et s, mais le m n'a aucune utilité ici, non ?

Hors ligne

#20 Le 11/06/2009, à 09:31

Peck

Re : Suppresion de commentaires

En effet, c'est juste une habitude pour ne pas avoir à se demander à chaque fois lequel sert à quoi.

ms = tout en une ligne et ^$ matche sur les lignes

Hors ligne

#21 Le 11/06/2009, à 09:54

hardball

Re : Suppresion de commentaires

merci les gars !
on peut donc encore retirer un caractère !

perl -0777pe 's#/\*.*?\*/##gs'

Dernière modification par hardball (Le 11/06/2009, à 09:54)


-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne

#22 Le 11/06/2009, à 12:44

Peck

Re : Suppresion de commentaires

C'est vrai que les octets coutent cher de nos jours smile

Hors ligne

#23 Le 11/06/2009, à 20:14

hardball

Re : Suppresion de commentaires

Peck a écrit :

C'est vrai que les octets coutent cher de nos jours smile

ce sont les frappes au clavier qui sont fatigantes wink


-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne

#24 Le 01/02/2010, à 15:02

hardball

Re : Suppresion de commentaires

j'ai essayé ça et ça marche aussi.
du coup j'évite de taper sur 4 touches (eh oui le shift compte pour écrire le 7) cool

perl -0pe 's#/\*.*?\*/##gs'

-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne