Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con el Manejo de Archivos en C

Estas en el tema de Ayuda con el Manejo de Archivos en C en el foro de C/C++ en Foros del Web. Hola a todos queria que me ayudaran una duda que tengo respecto a la lectura y manejo de archivo, ciertamente no tengo muchos conocimientos al ...
  #1 (permalink)  
Antiguo 28/07/2010, 20:15
 
Fecha de Ingreso: junio-2009
Mensajes: 13
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta Ayuda con el Manejo de Archivos en C

Hola a todos queria que me ayudaran una duda que tengo respecto a la lectura y manejo de archivo, ciertamente no tengo muchos conocimientos al respecto y he investigado arto pero aun no consigo algo provechoso.

sucede que tengo un "Archivo.txt" de la siguiente forma:


AAAAADDDTTTAAAAADDDTTTAAAAADDDTTTAAAAADDDTTT...AAA AADDDTTT@

que se supone que emulan campos de datos segun la letra con la que estan representados A,D,T respectivamente hasta un @ que es el simbolo que elegi como termino del archivo, pues a continuacion viene otro tipo de estructura de archivos que es de la siguiente forma:

IIICCCIIICCCIIICCCIIICCCIIICCC...IIICCC@

Luego de eso viene otro tipo que tiene EOF intermedios

FFFFFFFFFFF@GGGG@HHHHHH@.........@JJJJJJJ@

y el archivo se ve más menos de esta manera:

AAAAADDDTTTAAAAADDDTTTAAAAADDDTTTAAAAADDDTTT...AAA [email protected]@F FFFFFFFFFF@GGGG@HHHHHH@.........@JJJJJJJ@

como puedo hacer para leer e imprimir las primeras entradas AAAAADDDTTT (11 caracteres) por vez, osea procesar esos datos, antes de continuar con los siguientes?

como comenzar a leer desde la 4 entrada posicionandome al principio de ella, hay alguna funcion que me permita esto? por ejemplo posicionarme en 4*11 caracteres y comenzar a leer e imprimir desde ahi sin necesidad de pasar por lo anterior.

para la parte de IIICCC seria = que la anterior asi k no preguntaré

pero luego para la tercera, que funcion podría ocupar para posicionarme, si cuento con el dato de donde inicia, y luego poder imprimir cada archivo hasta donde encuentre el dato de @.

Luego la parte de archivos desiguales con @ intermedios, he definido un N fijo que debiera imprimir secciones de archivos igualmente hasta el @ si se encuentra dentro del archivo leido, ingresando por ejemplo a la posicion de tamaño fijo N*4 ( para acceder a la posicion de tamaño sijo 4 ) posicionandos al principio de cada N

TODO ESTO EN C

ojala hubiera alguien que me pudiera ayudar porfavor, de verdad lo agradeceria.
  #2 (permalink)  
Antiguo 29/07/2010, 09:29
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Ayuda con el Manejo de Archivos en C

una estrategia podria ser
leer caracter por caracter desde el archivo, y cuando encuentres un @, te detienes. Para leer puedes utlizar fgetc, lo q vas leyendo almacenas en un arreglo. y reeplazas la ultima posicion con un '\0' que indica fin de cadena.

http://www.cplusplus.com/reference/

Aquí puedes encontrar ayuda de como utilizar fgetc

otra es leer por bloques, la estrategia sería la siguiente

Lees por bloques de 80 o del número de caracteres que quieras con fgets. esto lo harías astas que el numero de caracteres leídos sea menor a 80, suponiendo que escogieras este numero de caracteres. con strchr puedes buscar el carácter @, toma en cuenta que el arreglo debe tener capacidad para almacenar el total de caracteres a leer.
  #3 (permalink)  
Antiguo 30/07/2010, 20:43
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años
Puntos: 4
Respuesta: Ayuda con el Manejo de Archivos en C

la funcion que buscas es fseek te posiciona en donde le digas
fseek(Archivo,posicion,bandera);
Archivo=el numbre de tu archivo
posicion=numero de bytes a avansar en el archivo
bandera=
SEEK_SET para empezar a contar desde el principio.
SEEK_CUT para leer desde la ultima posicion donde leyo.
SEEK_END para leer desde el final.
asi si quieres posicionarte en 4*11 lo harias asi
fseek(Archivo,4*11,SEEK_SET);
Saludos y espero te sirva.

Etiquetas: bloques, c++, disco, posicionamiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:30.