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
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.