Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

hosting en interdominios
12.929 lecturas y 9 respuestas
  • Leer palabras de un fichero en C

    Hola, trato de leer palabras de un fichero, cada linea del fichero contiene una palabra, las palabras tiene distinto tamaño y al uso la función fgets(cad, TAM, archivo), pero esto sólo funciona si se el tamaño exacto de la palabra que contiene la linea. Hay alguna funciona que me permita sacar la palabra con el tamaño exacto.

    Gracias

    Este tema lleva más de 6 meses inactivo. Es recomendable que abras un nuevo tema para retomar la conversación.
    • Una chapuza que hace lo que pides.... No me pilla el #include…

      Una chapuza que hace lo que pides.... No me pilla el #include el editor de texto pero es con stdio.h

      /* Programa que cuenta palabras */

      int main(void)
      {
      FILE *pfsArchivo;
      int nContador=0;
      char sAux[16]="";
      pfsArchivo= fopen("prueba.txt", "r");
      if (pfsArchivo== NULL)
      printf("No se pudo abrir el archivo %s \n", "prueba.txt");
      else
      { while (fscanf(pfsArchivo,"%16s", sAux) != EOF)
      { printf("%16s", sAux);
      nContador++;
      };
      printf ("\nNúmero de palabras = %d \n", nContador);
      fclose(pfsArchivo);
      }
      return 0;
      }

    • Bueno.... voy a desempolvar mis conocimientos de C. Vamos al…

      Bueno.... voy a desempolvar mis conocimientos de C. Vamos al tema (hay que incluir el fichero de cabecera stdio.h, que el editor no me deja ponerlo):

       /* Programa para leer palabras */
      
       /* Para BandaAncha.eu */
      
       /* Por Nacho Legido (djnacho) */
      
       /* OpenSource completo */
      
       char *lee_palabra(FILE *fichero);
      
       char *lee_palabra(FILE *fichero)
      
       {
      
       char buffer[30]; /* Cada palabra, de 30 caracteres como máximo */
      
       fgets(buffer,31,fichero); /* Se lee la palabra mediante fgets, se guarda en buffer, 30 caracteres como máximo, del tipo FILE* fichero */
      
       return buffer; /* Devuelve la cadena de caracteres que corresponde a la palabra+caracter de fin de linea */
      
       }
      
       void main(void)
      
       {
      
       FILE *fic; /* Variable que permite abrir y cerrar un fichero */
      
       char palabra[30]; /* Variable que guardará cada palabra */
      
       fic = fopen("miarchivo.txt","r"); /* Abre el archivo miarchivo.txt para lectura de texto */
      
       while (feof(fic)==0)
      
       {
      
       palabra=lee_palabra(fic); /* Llama a la función lee_palabra, que nos lee una palabra del fichero */
      
       printf("%s\n",palabra); /* Imprimimos la palabra en cuestión en pantalla. Se imprime palabra+caracter nueva linea */
      
       }
      
       printf("\nFin del programa.");
      
       fclose(fic);
      
       }

      Habría que mirar bien algunas cosas, ya que el código lo acabo de hacer deprisa y corriendo, pero creo que como ejemplo, te podría servir (al igual que el de rwx)
      Un saludo :)
      PD: La función fgets, va a leer hasta que se lean n-1 caracteres, o hasta que lea el caracter de nueva linea (ahí está el truco que utilizo en mi código, lee 30 caracteres, o antes llega el fin de linea, suponiendo que cada linea tenga menos de 30 caracteres, por eso leo 31 caracteres con fgets).

        • Ese trozo de codigo lo escribi deprisa y corriendo, y aviso…

          Ese trozo de codigo lo escribi deprisa y corriendo, y aviso en ese post que es posible que contenga errores. Como parece que has visto alguno te invito a que corrijas dichos errores y postees el codigo fuente ya corregido y sin bugs, para que asi puedas explicar mis meteduras de pata ;)

          Un saludo :)

    • Gracias a todos por responder, el problema que tenía es que…

      Gracias a todos por responder, el problema que tenía es que gets al final de la cadena pone el '\n' y yo estaba comparando esa cadena con otra y al tener '\n', pues nunca coincidia claro. Lo solucine copiandolo a otra cadena quitandole el '\n'. Pero si alguien sabe como coger los datos con fgets u otra función sin el '\n' pues me vendria muy bien.

      Muchas gracias.

      • La función fgets siempre te va a añadir a la cadena el '\n'…

        La función fgets siempre te va a añadir a la cadena el '\n' (nueva linea), al encontrar el mismo carácter en el fichero que tengas.
        Por lo tanto, con fgets, es imposible que el caracter '\n' no aparezca, ya que si lo encuentra en el fichero, lo añade a la cadena, y la función te devuelve la cadena+'\n'

        La solución.... la has encontrado tu mismo. Otra cadena, que actúe de buffer, lees la cadena principal, hasta que llegues al '\n', y cuando se haya llegado al carácter '\n', simplemente se sustituye por un '\0' (fin de cadena).

        Un saludo :)

      • no se Las palabras del doctor que examinó una radiografía de…

        no se

        Las palabras del doctor que examinó una radiografía de tu cabeza, cuando su asistente preguntó: "¿dónde está el cerebro?"