elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  leer caracteres de un archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: leer caracteres de un archivo  (Leído 6,550 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
leer caracteres de un archivo
« 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




« Última modificación: 7 Septiembre 2013, 03:14 am por m@o_614 » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #1 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!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #2 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
En línea

roilivethelife

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #3 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!
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #4 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
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #5 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 :)
En línea

PoCoMoNeY

Desconectado Desconectado

Mensajes: 14


01101101 01100001 01110100 01100001 01100100 01101


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #6 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.
« Última modificación: 8 Septiembre 2013, 12:10 pm por matador98 » En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #7 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
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: leer caracteres de un archivo
« Respuesta #8 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
leer 5 caracteres de una line de un archivo
Programación Visual Basic
ELGRANSOLRAC 1 1,829 Último mensaje 11 Agosto 2007, 13:50 pm
por ~~
[Ayuda] Leer unos caracteres y eliminarlos
.NET (C#, VB.NET, ASP)
Edu 2 2,148 Último mensaje 10 Abril 2011, 18:11 pm
por Edu
Problemas leer cadena de caracteres con conio
Programación C/C++
powerflame 1 3,084 Último mensaje 23 Mayo 2011, 20:52 pm
por Khronos14
Problema al leer fichero con caracteres especiales
Programación C/C++
Yeiner 2 6,216 Último mensaje 10 Diciembre 2011, 05:32 am
por Lateseles
Problema al leer caracteres [C]
Programación C/C++
S4ms3pi0l__ 1 2,124 Último mensaje 16 Noviembre 2017, 22:13 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines