C/Visual C - Manejo de archivos

 
Vista:

Manejo de archivos

Publicado por Miguel Espinoza (34 intervenciones) el 18/05/2005 02:28:46
hola!
tengo que leer un archivo (registro.txt) y ubicar en el una linea de chars (Date:) para escribir algo luego de los ':' pero no se cuales son las funciones que me permitan hacer esto.
Me puedes ayudar por favor?
gracias :D
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Manejo de archivos

Publicado por el_baina (9 intervenciones) el 22/05/2005 13:24:57
si usas c esxiste una funcion llamada fseek() que te permite posicionar el puntero de escritura en un byte determinado.
si usas c++ y la clase ofstream existe un método llamado seekp() que sirve para lo mismo
si el fichero registro.txt fuese asi:
Date:

simplemente tendrías que hacer
file* fich = fopen("registro.txt");
fseek( 6, fich, ?? ) // 6 es la posicion del archivo donde keremos empezar a escribir
fwrite( . .... );

donde pongo ?? tienes que poner una constante que indica si la funcion se tiene que mover a partir del principio del archivo o a partir de la posicion actual del puntedro de escritura de archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo de archivos

Publicado por Miguel Espinoza (34 intervenciones) el 22/05/2005 21:53:52
muchas gracias por contestar!
He estado jugando con estas funciones y aun tengo algunos problemas...
por ejemplo el Date: que tengo que encontrar no esta al principio, o sea, regustro.txt puede ser de esta forma:
// registro.txt
23hfdsiofhdusfDate:Algoquequiero,AlgoqueTambienquiero,@ashuhffdusi
//EOF

y lo que necesito es escribir una linea despues de Date: y antes de Algoquequiero, para que quede de esta forma:
// registro.txt
23hfdsiofhdusfDate:MiNuevoBloque,Algoquequiero,AlgoqueTambienquiero,@ashuhffdusi
//EOF

he definido que el @ sea el delimitador que me dice donde se acaba el campo Date:

Habia empezado a trabajar en guardar todo el archivo en un string, y entonces buscar la tira que ocupo con
int Date1 = MiString.find("Date:");
y esto me devuelve donde empieza, pero no consigo agregar sin sobreescribir.
Estoy en C++ y compilando con MSVC++6

Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo de archivos

Publicado por el_baina (9 intervenciones) el 30/05/2005 17:31:03
uff pues eso ya es mas complicado,¿sabes utilizar ficheros de datos?, yo creo que lo que quieres hacer se presta más a la utilización de ficheros de datos que de ficheros de texto, de todas formas te voy a decir como se hace eso.

Como las funciones de escritura en ficheros machacan los datos del fichero no puedes hacer la insercion de MiNuevoBloque directamente sobre el fichero, lo que tienes que hacer es leer la linea entera y guardarla en un string en memoria. despues mediante las funciones de manejo de cadenas tienes que modificar la cadena hasta que te quede como tu quieres, despues borras el archivo y te creas uno nuevo con el mismo nombre que esté vacio e insertas la linea entera.
De todas formas lo de meter toda la información en una linea es muy cutre y complicado, lo que se suele hacer es meter cada campo en una linea de tal manera que tu archivo quiearía así:
Campo1: loquesea, loquesea, loquesea
Campo2: loquesea, loquesea, loquesea
Date: loquesea, loquesea, loquesea
CampoN: loquesea,loquesea,loquesea

de tal forma que cuando quieras modificar un campo lo que tienes que hader es ir leyendo linea a linea hasta que des con el campo que quieres modificar y guardarlo todo en un archivo auxiliar, por ejemplo si quieres modificar el campo DATE te creas un archivo auxiliar.txt y metes

campo1: loquesea, loquesea, loquesea
campo2: loquesea,loquesea,loquesea

despues lees en un STRING la linea entera del campo date e insertas sobre ese STRING con funciones de manejo de cadenas el nuevo bloque y despues lo escribes en el fichero auxiliar de tal manera que quede:
Campo1: loquesea...
Campo2:loquesea...
DATE: NuevoBloque, loquesea,loquesea

y despues sigues leyendo el resto de lineas hasta el final del fichero registro.txt y las metes en el archivo auxilar de tal forma que te quede el auxiliar
campo1: loquesea..
campo2: loquesea..
DATE: loquesea...
CampoN: loquesea...
EOF

y por ultiimo borras el archivo registro.txt y renombras el archivo auxiliar.txt por registro.txt y es como si ubieses insertado el nuevo bloque en el archivo registro.txt
Siento no haber podido contestar antes , espero que esto te sirva de ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar