Autor
|
Tema: leer caracteres de un archivo (Leído 6,557 veces)
|
m@o_614
Desconectado
Mensajes: 389
|
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 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { FILE *fd; int inicio,fin; if((fd = fopen("F:\\archivo1.txt","r"))!=NULL ) { if((inicio = fseek(fd ,0,SEEK_SET )) != 0) printf("No se pudo posicionar el cursor al inicio"); else printf("El caracter que esta al inicio del archivo es: %c\n",fgetc(fd )); if((fin = fseek(fd ,-1,SEEK_END )) != 0) printf("No se pudo posicionar el cursor al final"); else printf("El caracter que esta al final del archivo es: %c\n",fgetc(fd )); } else printf("No se pudo abrir archivo"); return 0; }
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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
Mensajes: 389
|
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
Mensajes: 54
|
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
Mensajes: 389
|
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
Mensajes: 114
|
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: #include <stdio.h> #include <stdlib.h> int main() { FILE *fd; if((fd = fopen("F:\\archivo1.txt", "rt")) != NULL ) { if (fseek(fd , 0L, SEEK_SET ) != 0) printf("No se pudo posicionar el cursor al inicio"); else printf("El primer caracter legible del archivo es: %c\n", fgetc(fd )); if (fseek(fd , EOF -2 , SEEK_END ) != 0) // ( EOF-2 o: -3L ) printf("No se pudo posicionar el cursor al final"); else printf("El ultimo caracter legible del archivo es : %c\n",fgetc(fd )); } else printf("No se pudo abrir archivo"); return 0; }
Saludos
|
|
|
En línea
|
|
|
|
PoCoMoNeY
Desconectado
Mensajes: 14
01101101 01100001 01110100 01100001 01100100 01101
|
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
Mensajes: 389
|
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
Mensajes: 1.639
|
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í: int ch; /* ... */ /* Si es imprimible y no es espacio blanco se imprime tal cual ... */ else /* ... caso contrario se imprime como una secuencia de escape (Base 16) */
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
|
|
|
|
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
|
11 Agosto 2007, 13:50 pm
por ~~
|
|
|
[Ayuda] Leer unos caracteres y eliminarlos
.NET (C#, VB.NET, ASP)
|
Edu
|
2
|
2,152
|
10 Abril 2011, 18:11 pm
por Edu
|
|
|
Problemas leer cadena de caracteres con conio
Programación C/C++
|
powerflame
|
1
|
3,089
|
23 Mayo 2011, 20:52 pm
por Khronos14
|
|
|
Problema al leer fichero con caracteres especiales
Programación C/C++
|
Yeiner
|
2
|
6,228
|
10 Diciembre 2011, 05:32 am
por Lateseles
|
|
|
Problema al leer caracteres [C]
Programación C/C++
|
S4ms3pi0l__
|
1
|
2,128
|
16 Noviembre 2017, 22:13 pm
por MAFUS
|
|