• Miércoles 22 de Febrero de 2017, 11:49

Autor Tema:  como puedo concatenar la salida de un archivo  (Leído 754 veces)

ccgt

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
como puedo concatenar la salida de un archivo
« en: Lunes 29 de Agosto de 2016, 05:30 »
0

Publicidad 
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

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #1 en: Lunes 29 de Agosto de 2016, 16:20 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #2 en: Lunes 29 de Agosto de 2016, 18:00 »
0
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

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #3 en: Lunes 29 de Agosto de 2016, 20:24 »
0
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: [Seleccionar]

  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);

ccgt

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #4 en: Jueves 1 de Septiembre de 2016, 01:19 »
0
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: [Seleccionar]

  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);



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

chenech

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #5 en: Jueves 1 de Septiembre de 2016, 14:17 »
0
Hola, es que así das por echo un número de líneas y un número de letras por palabra, si cambias el for por un while, por ejemplo así: "while(fgets(cCadena, 70, fpFichero) != NULL)", lees hasta el final del fichero y no condicionas a saber el número de líneas de antemano. Cambia 70 por el máximo número de caracteres que puede tener una línea y la definición de cCadena también.
Espero poder haberte ayudado.
Un saludo.

ccgt

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #6 en: Sábado 3 de Septiembre de 2016, 00:18 »
0
ahora como puedo almacenar todo el contenido de un fichero en solo un string

chenech

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #7 en: Sábado 3 de Septiembre de 2016, 15:00 »
0
Para leer todo el contenido de un fichero en un solo string, te defines un puntero char por ejemplo y lees hasta el final del fichero con getc y vas añadiendo hasta que sea NULL, que querrá decir que has llegado al final, pon la apertura del fichero y el bucle while al siguiente código, si no sabes la longuitud puedes usar un campo string si no, un char definiendo el tamaño máximo, pero entonces tendrás que comprobar en el while que sea NULL o que se haya alcanzado el tamaño máximo para evitar un desbordamento:

definir cadena: string sCadena;
definir char para leer caracter a caracter: char c;
Abrir fichero
while mientras no sea NULL
Leeer caracter a caracter: c = getc (pfArchivo);
Asignar a la cadena, ir añadiendo: sCadena = sCadena + c;

Un saludo.
« última modificación: Sábado 3 de Septiembre de 2016, 15:02 por chenech »

ccgt

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #8 en: Domingo 4 de Septiembre de 2016, 05:11 »
0
ya logre guardar el contenido del fichero en un array como una cadena
pero ahora con strtok segun tengo entendido divide o delimita esa cadena segun el "delimitador" que queramos, y yo lo quiero tokenizar por los espacios en blanco y ya lo he hecho , es decir cada palabra la converti en una cadena ya que eso hace strtok cierto le agrega al final \0 de la palabra tokenizada,  pero ahora lo que necesito en guardar esa cadenas en un array como lo hago

segun entiendo las puedo guarda en un char * arreglo[numero de cadenas que almacena];  como lo hago

void main()
{
char entrada[100] ;
   char s2[4] = " \n\t";
   char *ptr; int i=0;
   char *copia[aqui pienso almacenar las cadenas separadas con strtok ];
char c;
FILE *fp=fopen("ard.txt", "r");
while((c=fgetc(fp))!=EOF){
entrada[i++]=c;
}
entrada='\0';
 ptr = strtok( entrada, s2 );    // Primera llamada => Primer token
   printf( "%s\n", ptr );
   while( (ptr = strtok( NULL, s2 )) != NULL )    // Posteriores llamadas
     printf( "%s\n", ptr );


}

chenech

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #9 en: Domingo 4 de Septiembre de 2016, 13:16 »
0
No se exactamente lo que quieres pero creo entender que es las palabras ya separadas tenerlas en un array para acdeder a ellas de una en una. Yo lo que haría es crear un array de dos dimensiones, por ejemplo definiendo así un char:

char cPalabras[10][100]

Sería para 10 palabras de un máximo de 100 caracteres cada una.
cPalabra[0] sería para la primera, [1] la segunda, etc.
Creas una variable int y le vas sumando en cada paso por el bucle:

i++
cPalabra

Y se la vas asignando en el bucle una palabra a cada paso por la misma sumando 1 a i.

« última modificación: Domingo 4 de Septiembre de 2016, 13:56 por chenech »

ccgt

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #10 en: Domingo 4 de Septiembre de 2016, 20:28 »
0
exacto asi es, pero como puedo recorrer cada string dentro del array, con strlen creo pero que hago para que siga despues del \0 que separa a cada cadena dentro del array

chenech

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:como puedo concatenar la salida de un archivo
« Respuesta #11 en: Lunes 5 de Septiembre de 2016, 16:34 »
0
No, nos estamos liando :-)
O tienes las palabras separadas en arrays de dos dimensiones o las tienes todas en un array.
El strtok ya te devuelve las palabras separadas.
Creo que debemos volver al principio, mira el primer ejemplo que te puse, ese ya te va devolviendo las palabras separadas por el espacio, entonces solo debes sumar si es de un tipo o de otro.
Pasamos a agruparlas en un array, luego a separarlas ... ya me perdí.
Lo que quieres es saber cuantas palabras hay de cada tipo? si es así, mira el primer ejemplo.

Un saludo.