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

Manejo de ficheros y listas en C

Estas en el tema de Manejo de ficheros y listas en C en el foro de C/C++ en Foros del Web. Hola, estoy teniendo un problema con ficheros. A mi me estarian dando un .txt que tiene: Nombre: ... Apellido: ... Mail: ... Telefono: ... Yo ...
  #1 (permalink)  
Antiguo 28/06/2013, 21:23
 
Fecha de Ingreso: abril-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Manejo de ficheros y listas en C

Hola, estoy teniendo un problema con ficheros. A mi me estarian dando un .txt que tiene:

Nombre: ...
Apellido: ...
Mail: ...
Telefono: ...

Yo necesito tomar solo el mail para despues pasarlo a una lista. Alguna idea de como lo puedo hacer o que funciones puedo usar?


Soy nueva programando y estoy trabada con esto, cualquier ayuda es bienvenida!
Saludos
  #2 (permalink)  
Antiguo 29/06/2013, 05:07
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Manejo de ficheros y listas en C

Los datos estan tal cual los describes, es decir si abres el txt ves

Código C:
Ver original
  1. Nombre: un nombre
  2. Apellido: tal cosa
  3. Mail: tal@wqe.com
  4. Nombre: otro
  5. Apellido: segundo
  6. etc

es decir que esta con la descripcion de lo que hay despues (textualmente nombre mas dos puntos mas un espacio mas el nombre en cuestion)

O esta como una lista de datos con un espacio de memoria estandar

Código C:
Ver original
  1. un nombre######el apellido######[email protected]###

Las # equivalen a nada, es decir se guardaron como estructuras con char[50] y solo se ocuparon 25 con lo que los 25 restantes son # (es decir nada o aunque sea algo no se tendra en cuenta)

Lo digo porque la carga será diferente en un caso que en otro

Saludos
vosk
  #3 (permalink)  
Antiguo 29/06/2013, 09:29
 
Fecha de Ingreso: abril-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Respuesta: Manejo de ficheros y listas en C

Hola, los datos estarian tal cual los escribi, nombre + dos puntos + espacio + el campo que sea.
  #4 (permalink)  
Antiguo 29/06/2013, 10:42
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Manejo de ficheros y listas en C

La forma mas facil es ir leyendo lineas y comparar con el inicio de frase esperado que en este caso es 'Mail: ', de forma que quitando la entrada el resto de frase es lo que buscas; un ejemplo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. #define MAXLINE 256
  4. #define SEARCHP "Mail: "
  5.  
  6. int main() {
  7.     char linea[MAXLINE], *pch;
  8.     FILE *arx = fopen("test.txt", "r");
  9.    
  10.     while(1) {
  11.         if(!fgets(linea, MAXLINE, arx)) {
  12.             if(ferror(arx)) {
  13.                 //se produjo un error
  14.             }
  15.             break;
  16.         }
  17.        
  18.         if((pch = strstr(linea, SEARCHP)) && !(pch-linea)) {
  19.             printf("%s\n", linea+strlen(SEARCHP));
  20.         }
  21.        
  22.         //final de archivo
  23.         if(feof(arx)) {
  24.             break;
  25.         }
  26.     }
  27.    
  28.     fclose(arx);
  29.     getchar();
  30.     return 0;
  31. }

Lo que te interesa es la parte del strstr: buscas si dentro de la linea leida pone 'Mail: ', y ademas requieres que ese 'Mail: ' esté desde el primer caracter (pch-linea) resulta la posicion donde se encontro la coincidencia.

La parte de datos es lo que queda de frase despues de 'Mail: ', por eso puedo mostrar linea+strlen("Mail: "). Ten en cuenta que esto incluye un \n (o incluso un \r\n, depende del editor de texto con que hayas creado el txt), de forma que si quisieras compiar el resultado a otro char* tendrias que omitir ese caracter final.

Saludos
vosk
  #5 (permalink)  
Antiguo 03/07/2013, 11:49
 
Fecha de Ingreso: abril-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Respuesta: Manejo de ficheros y listas en C

Gracias! Me sirvio mucho lo que pusiste :)

Etiquetas: ficheros, funcion, listas, manejo, programa
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 03:37.