miren el problema es que tengo un archivo creado,
lo que quiero es abrirlo, leerlo y editar una solo parte, una linea la que yo quiera
yo estoy usando fseek que supuestamente me permite colocar el cursor donde me de la gana pero no lo hace.
| |||
modificar una sola linea en fichero en lenguaje c miren el problema es que tengo un archivo creado, lo que quiero es abrirlo, leerlo y editar una solo parte, una linea la que yo quiera yo estoy usando fseek que supuestamente me permite colocar el cursor donde me de la gana pero no lo hace. |
| |||
este es uno de muestra pero asi es que lo estoy abriendo. void main(){ clrscr(); char nombre[]="juan.txt"; int resultado; FILE *fichero; fichero=fopen(nombre,"a+"); resultado=fseek(fichero,5,SEEK_SET); printf("%i",resultado); getch(); fprintf(fichero,"jajajajajaj"); if(fclose(fichero)!=0){ printf("problemas al cerrar"); getch(); } } esta es la prueva que ya logre que me devuleva un 0 en resultado pero cuando voy a ver el archivo el lo ha escrito al final del archivo no entinedo por que a ver si tu sabes por que. y una pregunta "¿por que dijiste "Turbo c++ no me extraña que tengas problemas "? |
| ||||
MSDN: "When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. The file pointer can be repositioned using fseek or rewind, but is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten." Tenes que abrirlo con r+ si el archivo ya existe y sino con w+. "r+" Opens for both reading and writing. (The file must exist.) "w+" Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed. Lo de Turbo C++ lo digo por un par de razones, primero y principal es un compilador de 16 bits para MS-DOS y segundo, y no menos importante, es Borland una empresa que segun mi experiencia personal se caracteriza por desarrollar productos de baja calidad.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
ok gracias pero ahora tengo un problema, yo quiero vorar lo que tengo escrito. y para eso estoy diciendo que escriba backspace, fprintf(fichero,"%c",8); pero en ves de borar el lo que me esta escribiendo [][][] unos cuadritos. no se por que pasa esto. |
| ||||
Te pasa eso porque no es una consola (de pantalla) sino un archivo y entonces lo que estas haciendo es poner en el archivo el numero 8. ¿Lo que queres borrar esta al final del archivo? Sino no se puede borrar, lo unico que podes hacer es ponerlo a 0.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
ok, tu me quieres decir que si lo que quiero borrar no esta al final del archivo no lo puedo borrar . ahora que diablos puedo hacer si lo que quiero es sustituir lo que esta ahi por otra cosa. |
| ||||
¿Como lo vas a borrar? Tendrias que mover, literalmente, los datos que estan justo despues al punto de borrado. Si lo que queres es sustituirlos solo tenes que situar el puntero del archivo en la posicion deseada y escribir.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| ||||
Entonces podes intentar leer lo que sigue al area que queres borrar (hasta el final del archivo), reescribirlo y despues truncar el tamaño a el total menos el area que queres borrar.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| ||||
Cita: En este momento no se me ocurre ninguna.
Iniciado por chrno si ya eso lo pense pero queria saber si habia una forma mas facil y comoda de hacerlo.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
bueno ahora tengo otro problema, supuestamente cuando uso fgets y que el no encuentra nada el debe devolverme un NULL, peor en ves de eso el me esta frisando el programa. puedes explicarme por que hace esto. |
| ||||
Cita: fgets no es para buscar, es para recibir datos del teclado. Si se queda bloqueado es porque no debes escribir nada. Lo que tenes que hacer es cargar el archivo en memoria y buscar la cadena con strstr por ejemplo.
Iniciado por chrno bueno ahora tengo otro problema, supuestamente cuando uso fgets y que el no encuentra nada el debe devolverme un NULL, peor en ves de eso el me esta frisando el programa. puedes explicarme por que hace esto.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
disculpa que aya tardado tanto en responder. pero a lo que me referia antes es que fgets lee la linea en que se encuentra el curson y pasa el cursor a la otra linea en el archivo que ya eh abierto, pero si en la linea que el lee no hay nada el debuelve un NULL, o eso se supone, porque me esta frisando el programa. espero que ahora si me hayas entendido. |
| ||||
Cita: Si, ahora te entendi y como decis devuelve NULL (0) cuando no hay mas texto. Aca tenes un ejemplo de la MSDN:
Iniciado por chrno disculpa que aya tardado tanto en responder. pero a lo que me referia antes es que fgets lee la linea en que se encuentra el curson y pasa el cursor a la otra linea en el archivo que ya eh abierto, pero si en la linea que el lee no hay nada el debuelve un NULL, o eso se supone, porque me esta frisando el programa. espero que ahora si me hayas entendido.
Código:
// crt_fgets.c /* This program uses fgets to display * a line from a file on the screen. */ #include <stdio.h> int main( void ) { FILE *stream; char line[100]; if( (stream = fopen( "crt_fgets.txt", "r" )) != NULL ) { if( fgets( line, 100, stream ) == NULL) printf( "fgets error\n" ); else printf( "%s", line); fclose( stream ); } }
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |