Я пытаюсь извлечь данные из файла csv, но не могу понять это правильно - PullRequest
0 голосов
/ 09 июля 2020

Вот что должен делать мой код:

  1. Снимите показания сканером штрих-кода, он состоит из 16-17 строк в зависимости от типа цветовой палитры.
  2. I сегмент то, что я читаю на более мелкие части для обработки, A, B1, B2, C (substr работает отлично)
  3. Я беру эти подстроки и преобразую их в читаемый формат.

Проблема в том, что я не могу (я не знаю, как) правильно извлечь данные, чтобы можно было сравнить B2 с соответствующим цветовым кодом и чтобы имя цвета отображалось правильно.

Вот образец файла csv, из которого я пытаюсь извлечь данные, он состоит из нескольких строк и двух столбцов:

RAL7016, NEGRO RAL7017, BLANCO RAL7018, AZUL RAL7019, VERDE YW207F, AZULOSCURO Y2208I, BEIGE Y4304I, AMARILLO YX353F, CIELO Y2212I, TURQUESA

Первая строка может содержать 6 или 7 символов, поэтому я спрашиваю в коде, присутствует ли RAL.

Если кто-нибудь может помочь я был бы очень признателен Это. Большое спасибо.

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

main()
{
    string scan, A, B1, B2, C;
    
    Init:
    int x=0, y=0;

    cout << "\nEsperando a scan...";
        
    cin >> scan;
    cout << "Codigo:" << scan;
    
    A = scan.substr (0,3); 
    B1 = scan.substr (3,3); 
    B2 = scan.substr (6,3);
    if (B2 == "RAL") B2 = scan.substr(5,7), C = scan.substr (13,4);
    else B2 = scan.substr(5,6), C = scan.substr (12,4);
    
    //Tipo de producto
    if (A == "PUE") A = "PUERTA", x=1;
    if (A == "PAN") A = "PANEL", x=1;
    if (A == "LAC") A = "LACADO", x=1;
    if (x=0) A = "PRODUCTO NO AGREGADO AL SISTEMA";
    
    //Tipo de acabado
    if (B1 == "BRI") B1 = "BRILLO", x=1;
    if (B1 == "TEX") B1 = "TEXTURADO", x=1;
    if (B1 == "MAT") B1 = "MATE", x=1;
    if (x=0) B1 = "TIPO DE ACABADO NO AGREGADO AL SISTEMA";
        
    //Leer colour desde archivo csv
    string colourcode = "blank", colourname = "blank";
    
    ifstream myfile("colourtable.csv");
    
    if(myfile.is_open()){
        while(getline(myfile, colourcode, ',') && getline(myfile, colourname)){
    
            if(B2 == colourcode){
                if(B2.substr (0,3) == "RAL"){
                    B2 = colourname.substr(8,20);
                }
                else B2 = colourname.substr(7,20);
            }
        }
    myfile.close();
    }
    else B2 = "Falta archivo colourtable.csv"; 
  
    //Output en pantalla
    cout << "\n Producto:" << A << "\n Acabado:" << B1 << "\n colour:" << B2 << "\n N Pedido:" << C << "\n" << "Y = "<< y << "\n";
    
    //colour debug
    cout << "\n colourcode:" << colourcode << "\n colourname:" << colourname;
    //Output en archivo a pedidos.csv
    fstream file;
    
    file.open ("pedidos.csv");
    
    if (file.is_open()){
        file << C << "," << B2 << "," << B1;
        file.close();
    }
    else cout << "\n Falta archivo pedidos.csv";
    //Reiniciar ciclo
    goto Init;
}
...