PROG QUI CALCULE LE NB DE LIGNE D'UN CODE(AVEC COMMENTAIRES,LIGNES VIDES, TOTAL,

xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009 - 15 mars 2004 à 07:04
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 25 mars 2004 à 18:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21227-prog-qui-calcule-le-nb-de-ligne-d-un-code-avec-commentaires-lignes-vides-total-taille

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 mars 2004 à 18:16
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.
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
19 mars 2004 à 17:38
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.
soumpro Messages postés 52 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 7 mai 2004
19 mars 2004 à 16:46
Pas mal ton source !
Mais comme le dit kirua , n'utlsz pas globales !

fstream ! ? hein ?!
hum !
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 mars 2004 à 17:38
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"
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
15 mars 2004 à 20:46
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
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 mars 2004 à 20:42
flex?
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
15 mars 2004 à 14:32
Tout ceci est fort intéréssant je le reconnais, mais pourquoi s'embêter alors que ce programme est codé par 10 lignes bien senties de flex ?
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
15 mars 2004 à 07:54
Salut !

personnellement, je viens de me faire un programme similaire mais celui-ci examine tous les fichiers cpp/h/c du repertoire indiqué et compte le nombre de lignes (j'ai oublié les commentaires :D)

voici le code :

#include
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


int compte_lignes(char *fichier);
WIN32_FIND_DATA wData;
HANDLE listing;

int main()
{
char l_chemin[256],*l_chemintmp;
int lignes;

printf("Entrez le chemin\n");
scanf("%s", &l_chemin);

l_chemintmp = new char[strlen(l_chemin)+1+strlen("\\*.*")];

strcpy(l_chemintmp,l_chemin);
strcat(l_chemintmp,"\\*.*");


listing = FindFirstFile(l_chemintmp, &wData);
int i =0;
int total=0;
char FileWithPath[256];

if (listing != INVALID_HANDLE_VALUE)
{
do
{
if(wData.cFileName[0] != '.' )
{
strcpy(FileWithPath,l_chemin);
strcat(FileWithPath,"\");
strcat(FileWithPath,wData.cFileName);

lignes=compte_lignes(FileWithPath);
printf("Votre fichier %s comporte %d lignes \n",wData.cFileName, lignes);
i++;
total+=lignes;
}
}
while (FindNextFile(listing, &wData));

FindClose(listing);

printf("\n\nsoit un total de %i\n\n",total);
}

system("PAUSE");
return 0;
}

int compte_lignes(char *fichier){
int nb_lignes=1;
FILE* File;
char c;

if (fichier==NULL)
{
return -1;
} // pour réutilisations ultérieurs : si on nous file un pointeur NULL on retourne 0..
else
{
File = fopen(fichier,"r");

if( File == NULL )
return -1;

do
{
c=fgetc(File);
if (c=='\n')
nb_lignes++;

}
while (c!=EOF); // tant qu'on est pas a la fin du fichier

fclose(File);
}

return nb_lignes;
}


comme vous pouvez le voir, il est largement inspiré d'une source ici présente pour le comptage de lignes... mais bon on s'en fou parce que c'est fait pour ca (poster des sources) et que c'est pas censé etre utilisé par qq1 d'autre que moi.

cordialement
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 mars 2004 à 07:51
Salut!

je trouve que c'est une bonne idée ton truc, j'ai une suggestion: utilise les structures. tu utilises énormément de variables globales, c'est déconseillé. Je te propose de mettre la déclaration de la structure Nb_Lignes_Struct par exemple ds un .h avec la déclaration de la fonction:

Nb_Lignes_Struct AnalyseLignesFichier(string fichier);

bon, moi j'utilise les strings, tu peux utiliser les char, ça te regarde ;-) ce que je veux dire, c'est qu'il faudrait rendre ce bout de code réutilisable.

Une idée d'utilisation: moi j'utilise un code similaire pr tenir une page web à jour, qui affiche un graphique indiquant le nombre de lignes de code dans chaque module en cours de dvpt.
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
15 mars 2004 à 07:04
Bonjour,

Je comptais justement me faire ce type d'outil alors tu tombes bien. Cela dit, j'ai ajouté en include la librairie sinon la compile ne passait pas sous MinGW32.

D'autre part, il y a un petit soucis au niveau du journal :

------------------------------------------------------------
Nom du code source: C:\Dev\-------\****.cpp
Nb de ligne au total: 814
Nb de lignes de code pur: 432
Nb de lignes des commentaires: 383
Nb de lignes vides: -1
Taille totale du fichier: -1
------------------------------------------------------------

Pourrais tu faire les corrections afin de terminer ton programme, parce qu'il m'interesse.

Enfin, il serait peut etre interessant de trouver un moyen d'automatiser ton outil : par exemple saisir le nom de la liste des fichier à partir d'un fichier txt plutot qu'à partir de la console.

Cordialement,
xter.
Rejoignez-nous