[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