Programación General > C/C++

 como puedo concatenar la salida de un archivo

(1/3) > >>

ccgt:
necesito concatenar la salida de un archivo que leo con fgetc  para saber si es un digito , una palabra reservada o un identificador

pero cuando lo hago if ((f1=fopen("ard.txt","r"))==NULL){
       printf("Error! opening file");

   }
  while((c=fgetc(f1))!=EOF)
  {
     if(isdigit(c));
printf("%c es numero",c);
  }
}

este solo muestra caracter por caracter es decir el 555 debe ser un numero y no 5 y 5 y 5 ademas hay problemas con los espacios en blanco

chenech:
Hola, es que la función fgetc es para leer carácter a carácter, si quieres leer líneas deberías usar fgets, getline o alguna otra.
Tienes mas de una palabra en cada línea? por que si solo es una tendrías que leerla y luego recorrer el array a ver si todos sus dígitos son numéricos, por ejemplo el 5 y 5 y 5, si siempre es true es un número, si salta algún false no es numérico.
En caso de varias palabras por línea, la lees completa y luego la recorres hasta que sea un espacio, y ahí haces la pregunta si es número cada uno de los dígitos del array desde la posición inicial de lectura del array hasta el espacio.

ccgt:
tengo este txt
-----------------------------------------------------------------------------------------------------------

miguel ruiz    44455   56.65  jose5r

  5 6  miguel55

----------------------------------------------------------------------------------------------------------------

es decir puede venir mas de una palabra en una linea y muchas mas lineas

pero el objetivo del programa es que este pueda identificar  los numeros con punto o sin punto y los nombres e identificadores que tiene letras y numeros y la salida del programa tendria que ser de este modo

--------------------------------------------------
miguel  ---- palabra                               
ruiz --------palabra
44455  ----- numero
56.65   -------numero flotante
jose5r-----------identificador
5----- numero
6------ numero

---------------------------------------------------
miguel55--------------identificador   

chenech:
Habrá que leer línea por línea el fichero, luego separar estas líneas por los espacios y en cada palabra comprobar si es palabra, número o identificador, el separar se hace con la función strtok, haz tres funciones (esto te queda para ti)  :jumpie:  que devuelvan true o false para sumar o no a cada tipo, así al final en los datos sPalabra, sNumero, sIdentifica tendrás la suma de cada uno:


--- Código: ---
  FILE *fpFichero;
  char *pPuntero;
  char cCadena[75];
  short sPalabra, sNumero, sIdentifica;
  sPalabra = sNumero = sIdentifica = 0;
  if((fpFichero = fopen("PRUEBA.TXT", "r")) != NULL)
  {
    while(fgets(cCadena, 70, fpFichero) != NULL)      // Aquí leemos hasta el final del fichero por línea
    {
      pPuntero = strtok(cCadena, " ");
      while(pPuntero != NULL)                               // Aquí partimos la línea leída por espacios
      {
        if(Palabra(pPuntero))                                  // Aquí llamaremos a una función que devuelva si es una palabra
          sPalabra++;
        if(Numero(pPuntero))                                 // Aquí llamaremos a una función que devuelva si es un número
          sNumero++;
        if(Identifica(pPuntero))                              // Aquí llamaremos a una función que devuelva si es un identificador
          sIdentifica++;
        pPuntero = strtok(NULL, " ");
      }
    }
  }
  fclose(fpFichero);

--- Fin del código ---

ccgt:

--- Cita de: chenech en Lunes 29 de Agosto de 2016, 20:24 ---Habrá que leer línea por línea el fichero, luego separar estas líneas por los espacios y en cada palabra comprobar si es palabra, número o identificador, el separar se hace con la función strtok, haz tres funciones (esto te queda para ti)  :jumpie:  que devuelvan true o false para sumar o no a cada tipo, así al final en los datos sPalabra, sNumero, sIdentifica tendrás la suma de cada uno:


--- Código: ---
  FILE *fpFichero;
  char *pPuntero;
  char cCadena[75];
  short sPalabra, sNumero, sIdentifica;
  sPalabra = sNumero = sIdentifica = 0;
  if((fpFichero = fopen("PRUEBA.TXT", "r")) != NULL)
  {
    while(fgets(cCadena, 70, fpFichero) != NULL)      // Aquí leemos hasta el final del fichero por línea
    {
      pPuntero = strtok(cCadena, " ");
      while(pPuntero != NULL)                               // Aquí partimos la línea leída por espacios
      {
        if(Palabra(pPuntero))                                  // Aquí llamaremos a una función que devuelva si es una palabra
          sPalabra++;
        if(Numero(pPuntero))                                 // Aquí llamaremos a una función que devuelva si es un número
          sNumero++;
        if(Identifica(pPuntero))                              // Aquí llamaremos a una función que devuelva si es un identificador
          sIdentifica++;
        pPuntero = strtok(NULL, " ");
      }
    }
  }
  fclose(fpFichero);

--- Fin del código ---

--- Fin de la cita ---



amigo disculpa creo que encontre una mejor solucion para mi problema
es leer el archivo en un array de strings

#include <stdio.h>
     #include <conio.h>
#define MAX_CHARS 20

typedef char string[MAX_CHARS+1]; 

main(){
   int i;
   string array[4];

   FILE *data;
   data = fopen("ard.txt","r");
   for(i = 0; i < 4; i++)
        { fscanf(data, "%s", array); }
           printf("%s",array[3]);
   getch();
}


el cual me separa cada palabra del txt y lo vueleve un string   pero ahora como hago para que ese array de string sea dinamico solicito me puedar ayudar

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa