Pages : 1
#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é
#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
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
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
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!
#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
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
Hors ligne
#23 Le 11/06/2009, à 20:14
- hardball
Re : Suppresion de commentaires
C'est vrai que les octets coutent cher de nos jours
ce sont les frappes au clavier qui sont fatigantes
-- 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)
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
Pages : 1