Leer archivo de registros y guardar en variables

Iniciado por ank3r, 21 Abril 2014, 03:25 AM

0 Miembros y 1 Visitante están viendo este tema.

ank3r

Con un programita en C estoy creando un archivo con la siguiente estructura:

struct t_config {
   char ip[13];
   int puerto;
};struct t_config t_config;


Es un archivo que tiene una IP (la puse como string) y un puerto de 4 numeros (un int)

Ahora tengo otro programa que abre este archivo. Lo que me gustaría es que tome la ip y la guarde en una variable y por otro lado que guarde en otra variable el puerto. Intente con fscanf, fseek, fread y no me sale. Cuando lee el puerto, por ejemplo le pongo 5000 (con ceros) me pone otros números..

ivancea96

Se más específico. Pon un ejemplo del fichero, el código con el que lo lees, y qué otros números.

eferion

Cita de: ank3r en 21 Abril 2014, 03:25 AM
Con un programita en C estoy creando un archivo con la siguiente estructura:

struct t_config {
   char ip[13];
   int puerto;
};struct t_config t_config;


Error. Esa es una estructura de datos que usa un programa... los ficheros no entienden de eso.

Entre otras cosas porque esa información se puede almacenar en mil formatos diferentes, binario, XML, Json, XDR, ASN.1, texto plano, ...

Esa definición tampoco indica si los dos datos están en la misma línea o en líneas diferentes... vamos, que la definición de una estructura sirve más bien para poco a la hora de conocer la estructura de los datos en un fichero.

Cita de: ank3r en 21 Abril 2014, 03:25 AM
Es un archivo que tiene una IP (la puse como string) y un puerto de 4 numeros (un int)

Error. el puerto puede ser de 4 dígitos... pero nunca de 4 números... ( la IP sí tiene 4 números ).

Quisquilloso... depende... con 4 números se puede interpretar que estás guardando el número de puerto separando cada dígito en un número independiente... hay que ser más conciso.

Cita de: ank3r en 21 Abril 2014, 03:25 AM
Ahora tengo otro programa que abre este archivo. Lo que me gustaría es que tome la ip y la guarde en una variable y por otro lado que guarde en otra variable el puerto. Intente con fscanf, fseek, fread y no me sale. Cuando lee el puerto, por ejemplo le pongo 5000 (con ceros) me pone otros números..

Sin saber cómo está guardada la información en el fichero y cómo estás intentando recuperarla es imposible saber qué está mal.

Así a bote pronto puede ser que el dato esté almacenado en formato texto y tú estés leyéndolo como un int o al revés... pero son tiros al aire.

ank3r

#3
Cita de: ivancea96 en 21 Abril 2014, 03:36 AM
Se más específico. Pon un ejemplo del fichero, el código con el que lo lees, y qué otros números.
Cita de: eferion en 21 Abril 2014, 12:06 PMSin saber cómo está guardada la información en el fichero y cómo estás intentando recuperarla es imposible saber qué está mal.
voy a ser más específico:
Estoy creando con un programita C un archivo de esta forma

int main ( void){

FILE *ptr;
char ip[13];
int puerto;

printf("Decime la IP");
scanf("%s",ip);
printf("Decime el puerto");
scanf("%d",&puerto);


ptr = fopen ("archivo", "a");
fprintf(ptr,"%s\n",ip);
fprintf(ptr,"%d\n",puerto);

fclose (ptr);
return 0;
}


el archivo cuando lo abro con gedit (Estoy en lubuntu) me aparece asi:
Supongamos que le mandé estos datos a la IP, primera línea y puerto en la segunda.

192.168.0.53
5000





Este archivo lo pongo en el directorio del programa que quiero que lo lea y estoy haciendo así:


FILE *CONFIG;
CONFIG = fopen("archivo","r");

if (CONFIG == NULL)
printf("Error al abrir el archivo\n");
else {

ACÁ QUIERO OBTENER LA IP POR UN LADO
               Y GUARDARLA EN UNA VARIABLE, CON EL PUERTO
               LO MISMO

}


PD: pregunta a parte, esto que hago acá:

Citar
FILE *CONFIG;
   CONFIG = fopen("archivo","r");


Es referenciar el archivo como variable de entorno? Eso es lo que me piden que haga y no sé si es la forma