[C con Clase] Leer CSV

David fire ddfire en gmail.com
Lun Feb 2 02:31:32 CET 2009


deberias tener en cuenta algun caracter de escape
por que en un campo de texto podrias tener ;
tenes que tener " como inicio de texto que no lo tenes que parcear " como
final de texto y por ejemplo /" para poder poner " en el medio del texto.

busca alguna biblioteca debe haber.
David

El 1 de febrero de 2009 19:38, Andres Chamorro
<andres.chamorro.r en gmail.com>escribió:

>
>
> 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;
> }
>
>
> _______________________________________________
> 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
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090201/b3196d0a/attachment.html>


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