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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Manipulando ficheros de texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Manipulando ficheros de texto  (Leído 2,561 veces)
ProgramError

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Manipulando ficheros de texto
« en: 21 Octubre 2017, 04:46 am »

Hola buenas.

Tengo algunos problemillas a la hora de leer (en C) información de archivos de texto.
Digamos que tendría un archivo con el siguiente formato

/**/
Nombre: aaa
Direccion: bbb
Telefono: ccc
/**/
Nombre: jjj
Dirección: sss
Telefono: aaa
/**/
.
.
.
Y así por ejemplo hasta 6 registros.

Mi pregunta es la siguiente. ¿Cómo podría hacer para leer cada registro de forma eficiente teniendo en cuenta que tengo que hacer un filtrado de los contactos para verificar que el nº de telefono es correcto?

Esto es lo que se me ocurre:

Leer linea a linea y cada una de ellas particionarla con un strtok(linea,:*) y de esta manera poder separar cada palabra. La info la metería en un struct contacto formado por nombre, direccion y telefono. Entonces ya podría verificar el numero de telefono.

Qué otras soluciones se os ocurren o qué funciones me recomendaríais para facilitar el recorrido del fichero.

También me surge otra duda. ¿Es posible que un fichero lo puedas empezar a leer desde la mitad por ejemplo? Es decir, imaginaros que quiero dejar una marca en mitad del fichero para luego volver a abrirlo y empezar a leer desde ahí. ¿Eso es posible?

Un saludo a todos y gracias de ante mano.



« Última modificación: 21 Octubre 2017, 04:53 am por ProgramError » En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Manipulando ficheros de texto
« Respuesta #1 en: 21 Octubre 2017, 07:41 am »

Lo primero que te recomendaría es informarte un poco respecto a las funciones de manejo de ficheros en C

https://fresh2refresh.com/c-programming/c-file-handling/
https://www.tutorialspoint.com/cprogramming/c_file_io.htm
http://www.studytonight.com/c/file-input-output.php


Para leer un fichero primero necesitas conocer la estructura de dicho fichero (como esta dispuesta la información) y luego pues lees cada registro (toda una estructura a la vez) del stream del fichero hasta EOF y no linea a linea. Podrias usar fread/memcpy/fscanf/etc, tienes muchas opciones, solo es cuestión de leer y practicar.
Saludos


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Manipulando ficheros de texto
« Respuesta #2 en: 22 Octubre 2017, 14:31 pm »

Asumo que el fichero lo has creado tú y por tanto la estructura que sigue depende enteramente de tí.

Si tienes campos fijos, entonces debes crear una estructura:
Código:
Estructura Datos
  Nombre
  Direccion
  Telefono
Fin estructura
Ahora entonces es posible leer de una vez una estructura como una única variable.
Cuántas erstrcuturas tienes?. Pués calcula: si el fichero tiene x bytes y cada estructura ocupa y bytes, habrá z estructuras (z=/x/y)
También podrías dejar al comienzo un valor de 4 bytes indicando cuantas estructuras tiene el fichero, no es imprescindible, en cualquier caso, el código vendría ser:

Código:
Estructura Dts()
entero = Funcion Leerfichero(ficheroX)
    Estructura Dt
    Entero n, k
    Buleano b
    
    b= AbrirFichero(ficheroX)
    Si b=TRUE luego
        n = ContarEstructuras // sea leyendo un campo del mismo, o del modo señalado)
        Redimensionar array Dts(0 a n-1)
        // x deberá ser el valor que competa al caso.
        PosicionarPunteroDeLectura(x) //al comienzo de la estructuras //si fuere necesario porque antes hubieres saltado a algún otro punto, para leer alguna cosa...
        
        Bucle para k desde 0 hasta n-1
            LeerFichero(dt)
            dts(k) = dt
        Fin bucle
        CerrarFichero
        Devolver n //númeor de estructuras hallados
    Si no
        Devolver -1 //error
    Fin si
Fin funcion

Parte de lo que solicitas ya te respondío el compañero más arriba.

Finalmente solo indicarte que sí, que es posible el "acceso aleatorio" en un fichero. Si está compuesto de registros (estructuras, datos cordinados), es conveniente que se señale el número de registro siguiente a leer, en vez de el puntero donde comenzar, y cuando vayas a continuar leyendo, calcular el posición exacta, multiplicando el número de estructuras,por los bytes que ocupa cada una, más el posible desplazamiento de estructuras únicas que hubiere al comienzo (del fichero) de las estructuras repetidas.
Ese dato, del punto de lectura, no conviene guardarlo en el mismo fichero si no en otro aparte...
Modificando la función anterior, que antes era:
Código:
entero = Funcion Leerfichero(ficheroX)
ahora se le añade un parámetro más y quedaría:
Código:
entero = Funcion Leerfichero(ficheroX, Registro)
    entero posicion
    ...
   posicion = ((Size(dt) * Registro) + DesplazamientoInicial)
   PosicionarPunteroDeLectura(posicion)
   ...
Fin funcion
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Módulos interesantes (manejo de ficheros, de texto, de gráficos.....) « 1 2 »
Programación Visual Basic
xavierote 16 5,430 Último mensaje 29 Marzo 2008, 02:22 am
por gulabyte
Problema de compatibilidad con ficheros de texto
Dudas Generales
Offensiv3Security 2 1,848 Último mensaje 26 Diciembre 2015, 14:47 pm
por someRandomCode
Lectura de ficheros de texto en c++
Programación C/C++
angelicavf 1 1,646 Último mensaje 30 Enero 2016, 19:44 pm
por MAFUS
Ficheros de texto
Programación C/C++
kirtash93 0 1,441 Último mensaje 30 Mayo 2016, 20:26 pm
por kirtash93
dudas con ficheros de texto
Programación C/C++
javnet 0 1,838 Último mensaje 16 Julio 2017, 20:40 pm
por javnet
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines