Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 7 Septiembre 2013, 03:10 am



Título: leer caracteres de un archivo
Publicado por: m@o_614 en 7 Septiembre 2013, 03:10 am
Saludos

Tengo el siguiente codigo que lee el primer y último carácter de un archivo de texto y los muestra en pantalla.La prueba consiste en mostrar el primer y último carácter correctamente independientemente del tamaño del archivo.

El codigo ya pude verificar que funciona para textos pequenios como: "Hola mundo" o "Tres tristes tigres tragaban trigo en un trigal", en el caso del primero me aparece primer caracter :H, ultimo caracter: o, pero si se trata de un archivo de texto un poco grande no me imprime el ultimo caracter y no entiendo por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    FILE *fd;
  8.    int inicio,fin;
  9.    if((fd = fopen("F:\\archivo1.txt","r"))!=NULL)
  10.    {
  11.        if((inicio = fseek(fd,0,SEEK_SET)) != 0)
  12.           printf("No se pudo posicionar el cursor al inicio");
  13.        else
  14.           printf("El caracter que esta al inicio del archivo es: %c\n",fgetc(fd));
  15.        if((fin = fseek(fd,-1,SEEK_END)) != 0)
  16.           printf("No se pudo posicionar el cursor al final");
  17.        else
  18.           printf("El caracter que esta al final del archivo es: %c\n",fgetc(fd));
  19.    }
  20.    else
  21.       printf("No se pudo abrir archivo");
  22.    return 0;
  23. }
  24.  

el texto en cuestion tiene mas de 100 caracteres

de antemano gracias




Título: Re: leer caracteres de un archivo
Publicado por: do-while en 7 Septiembre 2013, 10:06 am
¡Buenas!

¿Has comprobado que el último caracter no sea un salto de línea o cualquier caracter de espacio?

¡Saludos!


Título: Re: leer caracteres de un archivo
Publicado por: m@o_614 en 7 Septiembre 2013, 18:56 pm
Saludos do-while pense que con el lseek que tengo: lseef(fd,-1,SEEK_END) el cursor ya se habia posicionado una posicion antes del fin de archivo, crei que con esto seria suficiente


Título: Re: leer caracteres de un archivo
Publicado por: roilivethelife en 7 Septiembre 2013, 20:33 pm
No, asi te estas posicionando en el penultimo caracter, no en el último.

Cambia el -1 ese por un 0 y debería funcionar.

Saludos!


Título: Re: leer caracteres de un archivo
Publicado por: m@o_614 en 8 Septiembre 2013, 06:42 am
Saludos roilivethelife hice lo que me recomendaste y no funciono porque el lseek(fd,0,SEEK_END) me coloca el puntero en el fin de archivo o sea \0 donde no hay ningun caracter y cuando le pongo lseek(fd,-1,SEEK_END) le estoy diciendo que me coloque un lugar antes del fin de archivo o sea en el ultimo caracter pero ni asi funciona


Título: Re: leer caracteres de un archivo
Publicado por: ecfisa en 8 Septiembre 2013, 11:11 am
Hola m@o_614 .

El valor de EOF depende del sistema de archivos, pero comúnmente es interpretado con el valor -1, por lo que creo que podrías probar de este modo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  FILE *fd;
  7.  
  8.  if((fd = fopen("F:\\archivo1.txt", "rt")) != NULL) {
  9.    if (fseek(fd, 0L, SEEK_SET) != 0)
  10.      printf("No se pudo posicionar el cursor al inicio");
  11.    else
  12.      printf("El primer caracter legible del archivo es: %c\n", fgetc(fd));
  13.  
  14.    if (fseek(fd, EOF-2 , SEEK_END) != 0) // ( EOF-2 o: -3L )
  15.      printf("No se pudo posicionar el cursor al final");
  16.    else
  17.      printf("El ultimo caracter legible del archivo es : %c\n",fgetc(fd));
  18.  }
  19.  else
  20.    printf("No se pudo abrir archivo");
  21.  
  22.  getchar();
  23.  return 0;
  24. }
  25.  

Saludos :)


Título: Re: leer caracteres de un archivo
Publicado por: PoCoMoNeY en 8 Septiembre 2013, 11:38 am
Bueno yo creo que tu código a le falta en mi opinión es comprobar que el carácter no sea ni un espacio ni un salto de linea , etc.. , tal y como te dijo  do-while
Saludos.


Título: Re: leer caracteres de un archivo
Publicado por: m@o_614 en 8 Septiembre 2013, 21:39 pm
Tenian razon,  no solo el ultimo caracter era un salto de linea o espacio, sino que los ultimos 4 caracteres tambien eran saltos de linea


Título: Re: leer caracteres de un archivo
Publicado por: rir3760 en 10 Septiembre 2013, 04:25 am
Tengo el siguiente codigo que lee el primer y último carácter de un archivo de texto y los muestra en pantalla.La prueba consiste en mostrar el primer y último carácter correctamente independientemente del tamaño del archivo.
En tu programa no es necesario incluir <unistd.h> y no deberías utilizar fseek ya que se trata de un archivo en modo texto.

Tenian razon,  no solo el ultimo caracter era un salto de linea o espacio, sino que los ultimos 4 caracteres tambien eran saltos de linea
Puedes verificar si el carácter se puede imprimir utilizando funciones como isprint (prototipo en <ctype.h>), mas o menos así:
Código
  1. int ch;
  2.  
  3. /* ... */
  4.  
  5. /* Si es imprimible y no es espacio blanco se imprime tal cual ... */
  6. if (isprint(ch) && !isspace(ch))
  7.   printf("%c\n", ch);
  8. else /* ... caso contrario se imprime como una secuencia de escape (Base 16) */
  9.   printf("\'\\x%02x\'\n", ch);

Un saludo