[C con Clase] Leer CSV

Andres Chamorro andres.chamorro.r en gmail.com
Dom Feb 1 22:38:27 CET 2009


El 1 de febrero de 2009 14:27, Rubén <parraymartinez en terra.es> escribió:

> El dom, 01-02-2009 a las 11:46 -0500, Steven Davidson escribió:
> > Hola Rubén,
> >
> > Rubén wrote:
> > > Buenas a todos;
> > >
> > > Estoy intentando leer de un archivo csv separado por ;
> > >
> > > La cosa está en que al utilizar getline me coge toda la fila, pero lo
> > > que busco es leer la celda, sólo hasta el ;
> > >
> > > ¿Sabéis como podría conseguir esto?
> > >
> >
> > Podrías usar 'getline()', pero indicar el carácter separador ';'. Esto
> es,
> >
> > ifstream ifs( "datos.csv" );
> > char szCelda[256]="";
> >
> > ifs.getline( szCelda, ';' );
> >
> > Por defecto, el carácter separador es '\n', pero 'getline()' permite
> > indicar otro.
> >
> >
> > Espero que esto te sirva.
> >
> > Steven
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
> Hola Steven;
>
> No se que estoy haciendo mal, pero no me lo reconoce. Compila
> correctamente pero este es el resultado:
>
>
> char nombre [50];
> ifstream pru ("prueba.csv");
> pru.getline (nombre, ';');
> cout<<nombre<<endl;
>
> //
> ruben en gaya:~/Escritorio/prueba$ ./main
> PRUEBA1;PRUEBA2;
> ruben en gaya:~/Escritorio/prueba$
>
>
> ==================================================================
>

Yo tube que aser algop paresido y pero ocupe fgetc. La funcion lo que hace
es que lee las filas de cierta columna y las suma. col_pot es la columna que
se va a leer, num_colum es el numero de columnas y filename es la ruta del
archivo .csv

Espero que te sirva de algo!!:-D


int suma_potencia(int num_colum, int col_pot, char *filename){
    int i = 0, k = 0, carac = 0, fin_linea = 0, puntoycomas = 0, guardar =
0, suma = 0, pala[10000], punt_com_buf = 0;
    char caracter, palabra[9000][10];
    char* colum_pot_tot = new char[1000000];

    for(int j = 0; j < 9000; j++){
            for(int r = 0; r < 10; r++) palabra[j][r] = '\0';
            }

    FILE *archivo;
    archivo = fopen(filename, "r");
    while(!feof(archivo)){
          caracter = fgetc(archivo);
          if(caracter == ';'){
                      puntoycomas++;
                      punt_com_buf++;
                      if((puntoycomas > (num_colum - 1))&&(punt_com_buf ==
(col_pot - 1))){
                                      i++;
                                      guardar = 1;
                                      }
                      }
          if(punt_com_buf != (col_pot - 1)) guardar = 0;
          if(punt_com_buf == (num_colum - 1)) punt_com_buf = 0;
          if(guardar == 1) { colum_pot_tot[k] = caracter; k++; }
          if (feof(archivo)) break;
      }
    fclose(archivo);

    //cout<<colum_pot_tot<<endl;
    for(int i = 0; i <= strlen(colum_pot_tot); i++){
            if(colum_pot_tot[i] == ';') {fin_linea++; carac = 0;}
            else { palabra[fin_linea][carac] = colum_pot_tot[i]; carac++;}
            }

    delete colum_pot_tot;
    //for(int i = 0; i <= fin_linea; i++) cout<<palabra[i]<<endl;

    for(int i = 0; i <= fin_linea; i++){ pala[i] = atoi(palabra[i]);
}//cout<<pala[i]<<endl;}

    for(int i = 0; i <= fin_linea; i++) suma = pala[i] + suma;

    return suma;
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090201/5a200d15/attachment.html>


Más información sobre la lista de distribución Cconclase