Autor
|
Tema: programa c++ (Leído 4,216 veces)
|
kiara_luna
Desconectado
Mensajes: 13
|
hola quiero crear un programa que capture un archivo.cpp y me diga el numero de lineas, el numero de variables y que tipo de variables son(int, float, char), ya pude capturar el archivo y contar las lineas pero no se como contar las variables ayuda!!! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> void main() { clrscr(); FILE *archivo; int v_c; int v_contador=0; int v_contador2=0; int v_contador3=0; char v_nombre[25];
char *aray[4]; int i; aray[0] = strdup("if"); aray[1] = strdup("for"); aray[2] = strdup("while"); aray[3] = strdup("else");
printf("Digite el nombre del archivo, con su respectiva extensión\n"); scanf("%s",v_nombre); //El usuario ingresa el nombre archivo = fopen(v_nombre, "r"); //Abrimos el archivo
if (archivo == NULL) //En caso de que no exista el archivo { printf("El archivo no existe \n"); exit (EXIT_FAILURE); } else { while (v_c!=EOF) { v_c = getc(archivo); // Obtiene un caracter del archivo putchar(v_c); // Lo despliega en pantalla y continua..
if (v_c==59) // valor Accii del punto y coma ";" { v_contador++; } if (v_c==125) { v_contador2++; } if(v_c==32||v_c==10) //Contador de palabras { v_contador3++; } }
fclose(archivo); // Cerramos el Archivo de texto printf("\n\n\n\n El numero de Lineas que termina en ; es: %d",v_contador); printf("\n # de lineas que finalizan en %d",v_contador2); printf("\n # de Palabras es: %d",v_contador3);
} getch(); }
|
|
« Última modificación: 10 Abril 2011, 21:52 pm por kiara_luna »
|
En línea
|
kiara
|
|
|
Don Pollo
Desconectado
Mensajes: 74
/* No comments */
|
Deberías crear plantillas para poder ir comparando con las palabras que te encuentres en el texto. Yo compararía carácter a carácter todas las palabras con todas las plantillas y si con una sola letra ya no equivale a la plantilla con la que la estoy usando ó paso a la siguiente palabra porque ya he usado todas las plantillas con dicha palabra ó paso de plantilla.
Ni que decir tiene que las plantillas serían "char", "float", "int" y todos los tipos de variables que quieras contabilizar.
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Yo separaría todo por tokens, algo así: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE *file = fopen("./archivo.cpp", "r"); if(file == NULL) { perror("Error abriendo archivo"); } char linea[1000], *token; unsigned i = 0; while(fgets(linea , 999, file ) != NULL ) { i++; { printf("He encontrado la definición de una variable int en la línea : %d\n", i ); } } return EXIT_SUCCESS; }
Salida analizando el archivo que pones: [leo@archero c_proyects]$ ./code He encontrado la definición de una variable int en la línea : 9 He encontrado la definición de una variable int en la línea : 10 He encontrado la definición de una variable int en la línea : 11 He encontrado la definición de una variable int en la línea : 12 He encontrado la definición de una variable int en la línea : 16 [leo@archero c_proyects]$
|
|
|
En línea
|
|
|
|
kiara_luna
Desconectado
Mensajes: 13
|
hola, trate de correr el programa como tu lo planteastes pero no corre?? no entiendo porq.., me dijeron que lo hiciera con substring pero la verdad no he manejado eso??
|
|
|
En línea
|
kiara
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Si estas en Windows, quita edita esta línea: FILE *file = fopen("./archivo.cpp", "r"); Y dejala así: FILE *file = fopen("archivo.cpp", "r"); Obviamente archivo.cpp debe estar en la misma ubicación (carpeta) donde esté el ejecutable. Añade una pausa al final para que puedas ver el resultado y no se te cierre la consola.
|
|
|
En línea
|
|
|
|
kiara_luna
Desconectado
Mensajes: 13
|
hola gracias por tu ayuda, ya arregle mi programa con lo que tu me diste de aporte, el pequeño problema que se me presento es que no me esta contando ahora las lineas #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> void main() { clrscr(); FILE *file; int v_c; int v_contador=0; int v_contador2=0; int v_contador3=0; char v_nombre[25];
char *aray[4]; int i; aray[0] = strdup("if"); aray[1] = strdup("for"); aray[2] = strdup("while"); aray[3] = strdup("else");
printf("Digite el nombre del archivo, con su respectiva extensión\n"); scanf("%s",v_nombre); //El usuario ingresa el nombre file = fopen(v_nombre, "r"); //Abrimos el archivo
if (file == NULL) //En caso de que no exista el archivo { printf("El archivo no existe \n"); exit (EXIT_FAILURE); } else { while (v_c!=EOF) { v_c = getc(file); // Obtiene un caracter del archivo putchar(v_c); // Lo despliega en pantalla y continua..
if (v_c==59) // valor Accii del punto y coma ";" { v_contador++; } if (v_c==125) { v_contador2++; } if(v_c==32||v_c==10) //Contador de palabras { v_contador3++; } char linea[1000], *token; unsigned i=0; while(fgets(linea, 999, file) != NULL) { i++; token = strtok(linea, " "); if(!strcmp(token, "int")) { printf("He encontrado la definición de una variable int en la línea : %d\n", i); } token = strtok(NULL, " "); } }
fclose(file); // Cerramos el Archivo de texto printf("\n\n\n\n El numero de Lineas que termina en ; es: %d",v_contador); printf("\n # de lineas que finalizan en } %d",v_contador2); printf("\n # de Palabras es: %d",v_contador3);
} getch(); }
|
|
|
En línea
|
kiara
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Si pusiste atención (creo que no) te darías cuenta que la variable "i" guarda el número de líneas. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE *file = fopen("./archivo.cpp", "r"); if(file == NULL) { perror("Error abriendo archivo"); } char linea[1000], *token; unsigned i = 0; while(fgets(linea , 999, file ) != NULL ) { i++; { printf("He encontrado la definición de una variable int en la línea : %d\n", i ); } } printf("\nLineas totales : %d\n", i ); return EXIT_SUCCESS; }
|
|
|
En línea
|
|
|
|
anonimo12121
|
Algo así se podría hacer? string c int numeros_de_int=0; ifstream f("file.cpp"); file >> s; for(int i=0;c[i];i++){ if(c[i]=='i' && c[i+1]=='n' && c[i+2]=='t' && ( c[i+3]== ' ' || c[i+3]=='*') for(int j=i;c[j]!=';';j++){ if(c[j]==',')numeros_de_int++; } }
Podría funcionar esto pero tendría más bugs que windows XDD ademas que file >> s se corta en espacios xD pero podría ser una comparación similar a la que he hecho creo. xDD suerte PD: lo escrito aquí asique supongo que habrá muchos fallos.
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
De que puede funcionar puede, pero sería mucho engorro haciéndolo así.
|
|
|
En línea
|
|
|
|
kiara_luna
Desconectado
Mensajes: 13
|
hola xafi, gracias por tu aporte lo intente por ese lado y me funcionó a la perfeccion, solo que demore un poco mas... pero bueno mi pregunta ahora es si puede en ese mismo programa contar los comentarios que hay en el archivo que cargue a traves de token y si la sentencia podria ir igual a la de contar el int??? if(!strcmp(token, "//"))
|
|
|
En línea
|
kiara
|
|
|
|
|