Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como guardar las lineas de un archivo en un arreglo

Estas en el tema de Como guardar las lineas de un archivo en un arreglo en el foro de C/C++ en Foros del Web. Hola! Estoy programando en C, tengo que hacer un contador de líneas de código y además decir que funciones hay dentro del programa y el ...
  #1 (permalink)  
Antiguo 04/03/2016, 17:02
 
Fecha de Ingreso: diciembre-2013
Ubicación: Distrito Federal
Mensajes: 17
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Como guardar las lineas de un archivo en un arreglo

Hola!

Estoy programando en C, tengo que hacer un contador de líneas de código y además decir que funciones hay dentro del programa y el número de líneas que tiene cada una.

Aún no logro guardar palabra por palabra en un arreglo, lo que quiero hacer es que la primera línea del archivo de texto quede en el primer renglón del arreglo y así irlo haciendo para después poder recorrerlo y contar las funciones y el números de líneas que tiene.

Este es el código que tengo.

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

void contarFunciones(char path[]){
FILE *archivo;
int i, j;
int funcion1=0;//void
char* escenario[200][200];

archivo = fopen(path,"r");
if (archivo == NULL){
printf("El archivo no existe \n");
exit (EXIT_FAILURE);
}
for(i=0; i<80; i++){
for(j=0; j<80; j++){
fscanf(archivo, "%c", &escenario[i][j]);
printf("%c", escenario[i][j]);
if(escenario[i][j]=='v'){
funcion1++;
printf("%c", escenario[i][j]);
}
}
printf("\n");
}
fclose(archivo);
}

Espero alguien me pueda ayudar a resolver mi problema, ya tengo un tiempo batallando y no me sale.
  #2 (permalink)  
Antiguo 06/03/2016, 12:44
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Como guardar las lineas de un archivo en un arreglo

La forma más sencilla de localizar las funciones pasa por usar expresiones regulares. Claro que no aclaras si esa es una opción.

Separar el fichero palabra por palabra no veo qué utilidad puede tener.

Lo primero que tienes que hacer es saber identificar dónde empiezan las funciones. Dado lo heterogéneo que es el lenguaje c imagino que te habrán acotado las posibles soluciones. Como norma general una función empieza con algo similar a "[a-z]+/s*[a-z]+\([a-z,\s]*\){". Es decir: el tipo de retorno seguido de al menos ya separador (espacio, salto de línea, tabulador). Después viene el nombre de la función que puede o no ir acompañado de al menos un separador, los paréntesis con los argumentos en su interior. Después es posible que haya al menos un separador y finalmente la llave de inicio.

Una vez identificas el inicio de la función simplemente tienes que llevar la cuenta de las llaves de apertura y cierre para detectar el final de la función. Mientras tanto vas contabilizando el número de saltos de línea que te encuentras por el camino.

Como ves lo difícil es encontrar el inicio de la función.

Pista: a lo contado anteriormente puedes aplicar algunos trucos. Por ejemplo en C no vas a encontrar llaves así por las buenas si no es delimitando funciones o estructuras... Una estrategia más sencilla puede ser localizar una llave de apertura... Si la llave va precedida de paréntesis (ignorando todos los separadores que te encuentres), entonces estás ante una función... Sigue retrocediendo hasta que encuentres el paréntesis de apertura y lo siguiente que vas a encontrar es el nombre de la función. Una vez llegados a este punto lo demás es coser y cantar.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: cadena, caracteres, ficheros, lenguaje
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:45.