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

Procesar archivo de texto con separadores

Estas en el tema de Procesar archivo de texto con separadores en el foro de C/C++ en Foros del Web. Buenas tardes a todos, veréis, tengo una pequeña duda, a ver si alguien sabe decirme. Resulta que tengo un programita en el que quiero procesar ...
  #1 (permalink)  
Antiguo 27/10/2010, 10:40
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Procesar archivo de texto con separadores

Buenas tardes a todos, veréis, tengo una pequeña duda, a ver si alguien sabe decirme.

Resulta que tengo un programita en el que quiero procesar un fichero de texto con dos campos separados por dos puntos, similar a esto:

nirvana:nevermind
nirvana:unplugged
...

Cada campo quiero guardarlo en un atributo de un objeto que me creo.

El caso es que lo hago, y me funciona, pero quiero suponer que hay alguna manera más facil de hacerlo, y no sé si alguno me puede resolver la duda. Os mando el código -la parte importante- (funciona):

main()
{
int contador=0;
int tot_discos=0;

disco *a_discos[10];
rellenar_discos( a_discos,&contador, &tot_discos);
//Continua...
}

void rellenar_discos(disco *a_discos[100], int *contador, int *tot_discos)
{
FILE *f;
char c=' ';
int i=0;
char grupo[80],titulo[80];
f=fopen("discos.txt","r");

c=getc(f);
while (c!='\n' && !feof(f))
{
a_discos[*tot_discos]=new disco;
while (c!=':' && !feof(f))
{
grupo[i]=c;
i++;
c=getc(f);
}
grupo[i]='\0';
i=0;
c=getc(f);
while (c!='\n' && !feof(f))
{
titulo[i]=c;
i++;
c=getc(f);
}
titulo[i]='\0';
i=0;
c=getc(f);
a_discos[*tot_discos]->insertar(*contador,grupo,titulo);
a_discos[*tot_discos]->mostrar();
*contador=*contador+1;
*tot_discos=*tot_discos+1;
}

}
  #2 (permalink)  
Antiguo 28/10/2010, 11:41
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Procesar archivo de texto con separadores

strtok es tu amiga
  #3 (permalink)  
Antiguo 28/10/2010, 16:08
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Procesar archivo de texto con separadores

lo mas sencillo en este caso podría ser el uso de fscanf(), aunque muchas personas creen que solo es para leer un dato, scanf, sscanf y fscanf realmente nos hacen la vida muy sencilla, mira aqui te pongo un pequeño ejemplo de como funcionan los scanf's. espero te sea de ayuda.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <string.h>
  5.  
  6.  
  7. int main (){
  8.     char *cadena = "Castanieda:Cenit";
  9.     char titulo[15];
  10.     char cancion[15];
  11.     bzero((char *)&titulo, sizeof(titulo));
  12.     bzero((char *)&cancion, sizeof(cancion));
  13.    
  14.     sscanf(cadena, "%[^:]:%[^\n]", titulo, cancion);
  15.     fflush(stdin);
  16.     printf("Titulo: %s\n", titulo);
  17.     printf("Cancion: %s\n", cancion);
  18. }

Mi Salida

Código:
Titulo: Castanieda
Cancion: Cenit
  #4 (permalink)  
Antiguo 29/10/2010, 07:24
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Procesar archivo de texto con separadores

¿y si llego a tener un dato de más de 14 caracteres?
  #5 (permalink)  
Antiguo 02/11/2010, 08:04
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Procesar archivo de texto con separadores

Eso fue un vil ejemplo, obviamente declaras un arreglo con los elementos necesarios para lo que vayas a necesitar, esto se podria hacer con memoria dinamica pero considero que utilizar un arreglo es una solucion mas practica.
  #6 (permalink)  
Antiguo 02/11/2010, 09:19
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Procesar archivo de texto con separadores

Lo que quería decir es que por seguridad convendría agregar un límite de caracteres leídos a la cadena parámetro de scanf, para evitar problemas
  #7 (permalink)  
Antiguo 02/11/2010, 10:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Procesar archivo de texto con separadores

¡Hola, chicos, y ante todo gracias por la respuesta!

Veréis, no quería hacer uso de nada de C (scanf, por ejemplo).

Sé que con strtok se puede hacer, pero no me termina de salir.

La historia es primero de todo obtener una línea del fichero y luego separar con strtok... ¡pero no me sale! :(
  #8 (permalink)  
Antiguo 02/11/2010, 10:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Procesar archivo de texto con separadores

¡Ya tengo la respuesta! No era muy difícil, simplemente tenía que buscar un poco.

Aquí os dejo el resultado:

Código:
void rellenar_discos2 (disco *a_discos[100], int *contador, int *tot_discos)
{
     char str[80];
     char *grupo,*titulo;
     ifstream in("discos.txt");

     while (in.good()) //Hasta que se termine el fichero
     {
           a_discos[*tot_discos]=new disco; // Crea un objeto disco
           in.getline(str,80); //Lee una línea del fichero de 80 caracteres como máximo

           grupo = strtok (str,":"); // En grupo inserta el primer campo
           titulo = strtok (NULL,":"); // En titulo inserta el segundo campo

           a_discos[*tot_discos]->insertar(*contador,grupo,titulo); //LLama a la función insertar de a_discos
           *contador=*contador+1; // Incrementa el contador general   
           *tot_discos=*tot_discos+1; // Incrementa el contador de discos
     }         

}
  #9 (permalink)  
Antiguo 03/11/2010, 18:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Procesar archivo de texto con separadores

Cita:
Iniciado por windarin Ver Mensaje
Veréis, no quería hacer uso de nada de C

Etiquetas: procesar
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 15:30.