Prog qui calcule le nb de ligne d'un code(avec commentaires,lignes vides, total, taille..)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 837 fois - Téléchargée 28 fois

Contenu du snippet

traite un code source .C, .C++, .H et donne un copte rendu
avec le nb de lignes total, sans commentaires, le nb de lignes de commentaires,
le nb de lignes vides, le nb de lignes de code pur et la taille du fichier en octets.

Source / Exemple :


/*
  Name: NB_LIGNE_SANS_COMMENT
  Copyright: 
  Author: $kinia
  Date: 14/03/04 19:33
  Description:

        un ptit prog qui traite un ou plusieurs codes sources C ou C++
        et qui rend dans un fichier texte le nb ligne :

  • au total
  • de code pur
  • de commentaires
  • vides
et la taille totale du fichier compile avec Dev-C++ 4.9.7.0
  • /
#include <fstream.h> #include <string.h> #include <stdlib.h> #define taille_nom 50 /******************************************************************/ // LES VARIABLES /******************************************************************/ fstream f_source; fstream f_journal; char nom_source[taille_nom]; char char_courant; int nb_ligne; int nb_ligne_comment; int nb_ligne_vide; int nb_char; int nb_ligne_total; int nb_ligne_comment_total; int nb_ligne_vide_total; int nb_char_total; /******************************************************************/ // LES DECLARATIONS DES FONCTIONS DU PROGRAMME /******************************************************************/ void traitement(char nom[]); bool verifie_nom(char nom[]); void lit_chaine_char(); void lit_char(); void lit_comment_long(); void lit_comment_court(); void lit_vide(); /******************************************************************/ // LES FONCTIONS DU PROGRAMME /******************************************************************/ void traitement(char nom[]) { f_source.open(nom,ios::in); if(!f_source.good()){ cerr<<"\n\nImpossible d'ouvrir le fichier "<<nom_source<<endl; system("pause"); } else{ while(!f_source.eof()){ f_source.get(char_courant); if(char_courant=='"') lit_chaine_char(); else if(char_courant=='\'') lit_char(); else if(char_courant=='/'){ f_source.get(char_courant); if(char_courant=='*') lit_comment_long(); else if(char_courant=='/') lit_comment_court(); } if(char_courant=='\n' || char_courant==10) nb_ligne++; } f_source.close(); f_source.open(nom,ios::in); lit_vide(); nb_ligne--; nb_ligne_vide--; nb_char--; } f_source.close(); } bool verifie_nom(char nom[]) { int nb=strlen(nom); if(nom[nb-1]=='p' && nom[nb-2]=='p' && nom[nb-3]=='c' && nom[nb-4]=='.') return true; if(nom[nb-1]=='+' && nom[nb-2]=='+' && nom[nb-3]=='c' && nom[nb-4]=='.') return true; else if(nom[nb-1]=='c' && nom[nb-2]=='.') return true; else if(nom[nb-1]=='h' && nom[nb-2]=='.') return true; return false; } void lit_chaine_char() { bool fin=false; while(!fin){ f_source.get(char_courant); if(char_courant=='\\') f_source.get(char_courant); else if(char_courant=='"') fin=true; } f_source.get(char_courant); } void lit_char() { f_source.get(char_courant); if(char_courant=='\\') f_source.get(char_courant); f_source.get(char_courant); } void lit_comment_long() { bool fin=false; while(!fin){ f_source.get(char_courant); if(char_courant=='\n' || char_courant==10){ nb_ligne++; nb_ligne_comment++; } else while(char_courant=='*'){ f_source.get(char_courant); if(char_courant=='/') fin=true; } } nb_ligne_comment++; f_source.get(char_courant); } void lit_comment_court() { bool fin=false; while(!fin){ f_source.get(char_courant); if(char_courant=='\n' || char_courant==10) fin=true; } nb_ligne_comment++; } void lit_vide() { bool fin; bool vide; while(!f_source.eof()){ fin=false; vide=true; while(!fin){ f_source.get(char_courant); nb_char++; if(char_courant!='\t' && char_courant!=' '){ if(char_courant=='\n') fin=true; else vide=false; } } if(vide) nb_ligne_vide++; } } /******************************************************************/ // LA FONCTION PRINCIPALE /******************************************************************/ int main() { char **nom_source; int nb_source; nb_ligne_total=0; nb_ligne_comment_total=0; cout<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n"<<endl; cout<<"Ce programme donne dans un fichier journal.txt le nb de ligne"<<endl; cout<<"de votre fichier source sans les commentaires dans un langage C ou C++.\n"<<endl; cout<<"NOTE: Ne marche que si le code source est compilable et si les commentaires"<<endl; cout<<"sont bien utilises.\n\n\n"<<endl; cout<<"Donnez le nb de codes sources a calculer: "; cin>>nb_source; nom_source=new char*[nb_source]; for(int i=0;i<nb_source;i++) nom_source[i]=new char[taille_nom]; f_journal.open("journal.txt",ios::out); f_journal<<"\t\t --- NB_LIGNE_SANS_COMMENT by $kinia --- \n\n\n\n"; for(int i=0;i<nb_source;i++){ nb_ligne=0; nb_ligne_comment=0; nb_ligne_vide=0; nb_char=0; cout<<"Donnez le fichier source (*.c | *.cpp | *.c++ | *.h): "; cin>>nom_source[i]; if(!verifie_nom(nom_source[i])){ cerr<<"\n\n(*.c | *.cpp | *.c++ | *.h) seulement!"<<endl; system("pause"); } else{ traitement(nom_source[i]); } nb_ligne_total+=nb_ligne; nb_ligne_comment_total+=nb_ligne_comment; nb_ligne_vide_total+=nb_ligne_vide; nb_char_total+=nb_char; f_journal<<"------------------------------------------------------------\n"; f_journal<<"Nom du code source: "<<nom_source[i]<<endl; f_journal<<"Nb de ligne au total: "<<nb_ligne<<endl; f_journal<<"Nb de lignes de code pur: "<<nb_ligne-nb_ligne_comment-nb_ligne_vide<<endl; f_journal<<"Nb de lignes des commentaires: "<<nb_ligne_comment<<endl; f_journal<<"Nb de lignes vides: "<<nb_ligne_vide<<endl; f_journal<<"Taille totale du fichier: "<<nb_char<<endl; f_journal<<"------------------------------------------------------------\n"; } if(nb_source>1){ f_journal<<"\n###########################################################\n"<<endl; f_journal<<"------------------------------------------------------------\n"; f_journal<<"Nom du code source: TOUS"<<endl; f_journal<<"Nb de ligne au total: "<<nb_ligne_total<<endl; f_journal<<"Nb de lignes de code pur: "<<nb_ligne_total-nb_ligne_comment_total-nb_ligne_vide_total<<endl; f_journal<<"Nb de lignes des commentaires: "<<nb_ligne_comment_total<<endl; f_journal<<"Nb de lignes vides: "<<nb_ligne_vide_total<<endl; f_journal<<"Taille totale du fichier: "<<nb_char_total<<endl; f_journal<<"------------------------------------------------------------\n"<<endl; } f_journal<<"\n\n\nProgramme fait par : $kinia en 2004"<<endl; f_journal<<"Compilateur : Dev-C++ 4.9.7.0"<<endl; f_journal<<"Mail : cbwinny@yahoo.fr"<<endl; f_journal.close(); }

Conclusion :


je sais que certains compilo le font mais je le savais pas avant de le faire

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Salud à ts,

Ds MétaProg &MPLight,
un module de stat compte les nb de caractères en
- code
- directive de précompilation
- commentaires
( puis commentaires avec déclinaisons: par ex ceux commençant par /// car ils constituent la doc...)

et donne les proportions,
encore qq retouche et je livre son source...

Kénavo

PS: un exe avec ce module devait figuré ds l'article que G fait sur les DLL

sinon,

bonne idée,
évite les var globales
et préfère le C++ et ces classes par rapport aux structures...


GoldenEye>
si T capable de trouver un code Lex/Yacc pour analyser tout type de code C/C++ sans faire de supposition comme "les types commencent par une majuscule"
ça m'intéresse!
Note: G publié les srces d'un analyseur de code C faisant ces supposition

Magicalement,
Nono.
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

Kirua a en sa possession une version que j'ai personnelement recodée pour coller mieux à la programmation C++. Cette version recodée corrige d'ailleurs quelques problèmes de comptage.

Cordialement,
Xter.
Messages postés
52
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
7 mai 2004

Pas mal ton source !
Mais comme le dit kirua , n'utlsz pas globales !

fstream ! ? hein ?!
hum !
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

merci pr l'info de base, on peut dire que t'as l'esprit de synthèse ;-) enfin je te comprends, à partir de ça je trouverai rapidement des compléments d'infos, vive goolge :-) Je sais plus qui a dit: "Google is the closest thing internet has to an ultimate answer-machine"
Messages postés
527
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
6 octobre 2008
3
Flex/lex : outil de base pour réaliser des analyseurs lexicaux
Forme un PACS avec son collègue Bison/yacc utilisé pour implémenter des analyseurs syntaxiques
Ce sont les deux programmes utilisés pour constuire des compilateurs
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.