Ayuda con archivo csv

Iniciado por SoyBolita, 29 Diciembre 2019, 20:16 PM

0 Miembros y 1 Visitante están viendo este tema.

SoyBolita

Hola a todos, verán tengo una consulta estoy realizando un pequeño programa en C++, el cual por cierto es primera vez que uso este lenguaje(soy bastante novato). bueno lo que tengo que hacer es leer un archivo .CSV y pasarlo a un DataGridView lo que he podido lograr pero es de manera "estática" es decir tengo que declarar cuantas columnas posee ese archivo, por ejemplo lo probé con 4 columnas pero no me va a resultar si el archivo csv tiene mas o menos de cuatro columnas, el problema es que no logro hacer que la lectura sea en forma dinámica y se adapte a cualquier cantidad de columnas del archivo.

Este es el código con el que hago la lectura:



ifstream in(filename);

if (in.fail()) {

MessageBox::Show("Error al abrir el archivo", "Mesaje");
}
else {

std::string campo1;
std::string campo2;
std::string campo3;
std::string campo4;

while (!in.eof()) {

getline(in, campo1, ',');
getline(in, campo2, ',');
getline(in, campo3, ',');
getline(in, campo4, '\n');

String^ c1 = gcnew String(campo1.c_str());
String^ c2 = gcnew String(campo2.c_str());
String^ c3 = gcnew String(campo3.c_str());
String^ c4 = gcnew String(campo4.c_str());

Importacion::dataGridVistaCSV->Columns->Add("c1", "C1");
Importacion::dataGridVistaCSV->Columns->Add("c2", "C2");
Importacion::dataGridVistaCSV->Columns->Add("c3", "C3");
        Importacion::dataGridVistaCSV->Columns->Add("c4", "C4");

Importacion::dataGridVistaCSV->Rows->Add(c1,c2,c3,c4);

}

     }



También quisiera saber si creen que es recomendable usar visual studio para crear el programa ya que debo utilizar interfaz de usuario.

espero puedan ayudarme y desde ya muchas gracias. ;D


vangodp

vamos suponer que hayas leído una linea de un archivo:
Código (dos) [Seleccionar]
linea1 campo1,linea1 campo2,linea1 campo3,linea1 campo4,linea1 campo5

Lo que se pueda hacer(Y no digo que sea el metodo más efectivo) es una especie de strtok así como:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main(){
    std::string linea("linea1 campo1,linea1 campo2,linea1 campo3,linea1 campo4,linea1 campo5");
    std::istringstream ss(linea);
    std::string token;
    int nColumnas = 0;
   
    while (std::getline(ss, token, ',')){
        //std::cout << token << std::endl;
        nColumnas++; //contador de columnas
    }
   
    cout<< "El numero de columnas es: " << nColumnas << endl;
   
    return 0;
}

Se puede montar una fácilmente una función y pasar una string, y que esa string le retorne el numero de columnas que tiene el tal csv.

Espero que sirva... De todos modos puedes buscar en google algo así: "Como saber el numero de columnas de un archivo csv en c++"

Suerte