Programa en C para contar líneas de código de trabajos

jackl007 Seguir

Eta
Programador
Verificación en dos pasos activada
Desde
26 Ene 2010
Mensajes
1.397
Hola amigos, les traigo un programa que escribí en C para contar las lineas de código de tus programas o scripts en C, VB, PHP, Javascript, CSS, etc.

El programa lo que hace es leer cada salto de linea y si el número de caracteres de mayor a 4 lo cuenta como una linea de código. De esta manera puedes saber cuanto escribes.

Por ejemplo yo estoy programando una web de cero y voy escribiendo 6500 lineas de código, y usando 70 archivos.
Insertar CODE, HTML o PHP:
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <stdio.h>
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <string>
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <iostream>
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <fstream>
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <dirent.h>
[URL=http://forobeta.com/usertag.php?do=list&action=hash&hash=include]#include[/URL]  <sys/stat.h>

using namespace std;

string get_ext(string archivo);
long contar_lineas_codigo(string archivo);
string reemTexto(string temp, string bus, string por, int i);

int main(int argc, const char * argv[])
{
 
    // Directorio a examinar
    string sdirn;
    cout<<"Ingrese el nombre del directorio"<<endl;
    cin >>sdirn;
    
    DIR *dir = NULL;
    struct dirent *drnt = NULL;
    char* dirn;
    dirn = new char [sdirn.size()+1];
    strcpy (dirn, sdirn.c_str());
    
    string ext;
    long c_lineas = 0;
    int total = 0;
    
    //Recuperar archivos y carpetas del directorio indicado
    dir=opendir(dirn);
    if(dir){
        
        drnt = readdir(dir);
        while(drnt){
            ext = get_ext(drnt->d_name);
            if(ext.compare("php") == 0 or ext.compare("css") == 0){ // Aqui SOLO filtro archivos web: CSS / PHP
                total++;
                c_lineas = c_lineas + contar_lineas_codigo(sdirn + "/" + drnt->d_name); //Cuenta las lineas de cada archivo
                
            }
            drnt = readdir(dir);
        }
        closedir(dir);
    }else{
        cout<<"Error en el directorio: "<<dirn<<endl;
    }
    cout<<"Total Ficheros en "<<sdirn<<": "<<total<<endl;
    cout<<"Total Lineas: "<<c_lineas<<endl;
    
    return 0;
}

 long contar_lineas_codigo(string archivo){
     //Cuenta las lineas del archivo indicado
     string linea;
     long c = 0;
     ifstream ifArchivo (archivo);
     if (ifArchivo.is_open()){
         while (! ifArchivo.eof() ){
             getline (ifArchivo,linea);
             linea = reemTexto(linea,"\t","",1); //Quita las tabulaciones reiteradamente
             linea = reemTexto(linea,"\t","",1);
             linea = reemTexto(linea,"\t","",1);
             linea = reemTexto(linea,"\t","",1);
             remove(linea.begin(), linea.end(), ' ');
             if(linea.length()>5){
                 c++;
             }
         }       
         ifArchivo.close();
     }
     else{ cout << "No se pudo abrir el archivo: "<<archivo<<endl;};
     return c;
 }
string reemTexto(string temp, string bus, string por, int i){
    long posicion=-1;
    do{
        posicion = temp.find(bus,posicion + i);
        if (posicion!=string::npos){
            temp.replace(posicion,bus.size(),por);
        }
    }while(posicion!=string::npos);
    return temp;
}
string get_ext(string archivo){
    long pos = archivo.find_last_of(".");
    if(pos>1){
        return archivo.substr(pos+1);
    }else{
        return "";
    }  
}

Yo lo he programado en xCode (Mac), compilado para Mountain Lion Os.
Pueden compilarlo para windows / linux usando el Dev C++ u otro similar.

Espero que les sirva.
 

ciberutilidades

Iota
Programador
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Desde
16 Ago 2010
Mensajes
2.290
Muchas de esas librerias ni las conocia... no tendre problema con las librerias si lo compilo en DevC++?
 

jackl007

Eta
Programador
Verificación en dos pasos activada
Desde
26 Ene 2010
Mensajes
1.397
si utilizo codeblocks no tendre ningun problema?

Muchas de esas librerias ni las conocia... no tendre problema con las librerias si lo compilo en DevC++?


Las librerías utilizadas use cuando programa en Windows con el Dev C++, así que no debe dar problema. En cuanto al CodeBlocks no creo que de problema.

Espero que comenten si todo va bien usando Dev o CodeBlocks, en teoría debe compilar, son librerías estándares.
 

Torrecilla

1
Ni
Programador
Verificación en dos pasos activada
Suscripción a IA
Desde
2 Feb 2013
Mensajes
3.867
Eres todo un crack jackl :)

Se ve muy bueno, yo hace mucho que no programo en C.
Y también luego pongo un aporte de un ejemplo de STRUCT que hice en C, de +200 líneas creo.

Saludos!
 

jackl007

Eta
Programador
Verificación en dos pasos activada
Desde
26 Ene 2010
Mensajes
1.397
Arriba