Script pour compter des lignes de code

Résolu
zg2pro -  
nicobzz Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
Slt,

Je voudrais réaliser un script en bash ou tcsh peu importe qui compte les lignes effectives d'un code :
le script doit donc supprimer les lignes comprises entre un /* et un */
supprimer les lignes commencant par //
supprimer les lignes vides puis compter ce qui reste.
Tout cela dans le but d'établir des ratios de productivité (lignes codées à l'heure) sur le développement d'un code.

#! /bin/tcsh
set openComment "\/\*"
set unComment "\*\/"
#pour ne pas melanger commentaires et lignes de code :
tr '$openComment' "\n/*" < $1 | tr '$unComment' "*/\n"

je suis pas tres doue en cette matiere desole, j'ai pas trouvé mieux pour commencer ... et encore meme pas ca marche ca parce que ca enleve les etoiles sans slash, ouais je sais je suis une quiche...
apres evidemment faudrait faire une boucle je pense pour mettre des "//" au debut de toutes les lignes qui sont entre des "/*" et des "*/" puis supprimer tout ça...

bon bin si quelqu'un peut m'aider, je suis sur qu'en plus ca sert toujours ce genre de scripts... j'en serai gré...
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Bon alors entendons nous bien ;-))

On doit supprimer :
- les lignes commençant par //
- les lignes entre /* et */ (avec ou sans retour chariot entre les balises)
- les lignes blanches

La ligne de commande qui suit :
sed -e '/^\/\{2\}/d;/^$/d;/^\/\*.*\*\/$/d;/^\/\*/,/\*\/$/d' fich.txt | wc -l
supprime donc :

- les lignes commençant par //
/^\/\{2\}/d
- les lignes blanches
/^$/d
- les lignes entre /* et */ sans retour chariot entre les balises
/^\/\*.*\*\/$/d
- les lignes entre /* et */ avec retour chariot entre les balises
/^\/\*/,/\*\/$/d
et compte les lignes restantes ;-))
4
nicobzz Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,
en fait je pense que tr ne fait pas l'affaire , il faut plutot un truc comme grep qui reconnait les expressions régulières en utilisant les options -o (pour ne pas selectionner la ligne mais juste le match) et -v (pour inverser la selection) avec l'expr reg:
\/\**\*\/
0
nicobzz Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
en fait il me semble que meme avec grep c'est pas gagné,
j'ai trouvé ce site:
http://abs.traduc.org/abs-4.2.01-fr/
qui explique tout ce qu'on peut faire avec des scripts,meme avec sed et awk il me semble que ça analyse ligne par ligne
0