C ++在数组中存储项目并设置每个令牌

时间:2015-02-09 00:05:33

标签: c++ arrays

我的名字是Faith,我是C ++的初学程序员。我正在开发一个项目,我必须在两个文件中读取,并能够将每个文件中的项目分隔为自己的变量。第一个文件有两条信息用“,”分隔,第二个文件有三条信息。到目前为止,我认为我已经完成了阅读文件并获取文件中的每一行。此外,我已经用“,”分隔每个项目,现在我正在尝试将这些项目存储在其变量中。请帮忙!我尝试过多次启动这个项目,这是我知道如何实现这一目标的唯一方法。

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>

using namespace std;

class Manufactuer{
    string upcode;
    string company_name;
public:
    void setupcode(string value){
        upcode= value;  }
    void setcompany_name(string value){
        company_name= value; }
    string getupcode(){ return upcode;}
    string getcompany_name(){return company_name;}
    
};

class Products{
    string product_num;
    string quantity;
    string product_name;
public:
    void setproduct_num(string value){
        product_num= value;  }
    void setproduct_name(string value){
        product_name= value; }
    void setquantity(string value){
        quantity = value;}
    string getproduct_num(){ return product_num;}
    string getquantity(){return quantity;}
    string getproduct_name(){return product_name;}
    
};



int main(int argc, const char * argv[]) {
        //opens the csv file
    std::ifstream mccodesfile;
    std::ifstream salesfile;
        mccodesfile.open("mccodes.csv");
        if(!mccodesfile){// file couldn't be opened
            cout<<"Failed: file could not be opened"<<endl<<"Press Enter to Close:";
            cin.get();
            return 0;
        }else
            cout<<"Successfully opened file!"<<endl;
    salesfile.open("sales.csv");
    if(!salesfile){// file couldn't be opened
        cout<<"Failed: file could not be opened"<<endl<<"Press Enter to Close:";
        cin.get();
        return 0;
    }else
        cout<<"Successfully opened file!"<<endl;
    Manufactuer* upccodes;

    int count; //how many elements in the array
    int size; //how large the array
    
    count = 0;
    size = 2;
    upccodes= (Manufactuer*)malloc(size*sizeof(Manufactuer)); //Malloc dynamatically reserve memory for variable pointer    
        string line;
        while (getline(mccodesfile,line)) {// Taking every line from the file and putting in the variable line
            Manufactuer newcode = Manufactuer(); //creating a upcode object
            istringstream ss(line);
            string token; //setting up split values
            bool haveReadUPCode = false;
            while (getline(ss,token,',')){// Separated values by comma
                if(!haveReadUPCode){
                    newcode.setupcode(token);
                    haveReadUPCode = true;
                    
                }else{
                    newcode.setcompany_name(token);
                }
              
            }
            if (count == size){
                size = size * 2;
                upccodes= (Manufactuer*)realloc(upccodes,size*sizeof(Manufactuer)); //Double the size while keeping the same elements
            }
            upccodes[count++]= newcode;
     //       cout<<line<<endl;
            
        }
   for (int i = 0; i<count; i++){
     //   cout<<upccodes[i].getcompany_name()<<endl; //Prints Manufactuers name--Works!
       
   }
    for (int i=0; i<count; i++) {
    //    cout<<upccodes[i].getupcode()<<endl; //Prints UPCcodes--Works
    }
        Products* product;
    product= (Products*)malloc(size*sizeof(Products)); //Malloc dynamatically reserve memory for variable pointer
    
    while(getline(salesfile, line)){{// Taking every line from the file and putting in the variable line
        Products newProduct = Products(); //creating a product object
        istringstream ss(line);
        string token; //setting up split values
        bool haveReadProduct = false;
         while (getline(ss,token,',')){// Separated values by comma
         if(!haveReadProduct){
             newProduct.setproduct_num(token);
             haveReadProduct = true;
        } else{
                 newProduct.setproduct_name(token);
                 newProduct.setquantity(token);
             }
         }
         if (count == size){
         size = size * 2;
         product= (Products*)realloc(product,size*sizeof(Products)); //Double the size while keeping the same elements
         
         
         }
         product[count++]= newProduct;
         //cout<<line<<endl; //LINES ARE Printing!
         
         }
       }
    for (int i = 0; i<count; i++){
      //  cout<<product[i].getproduct_name()<<endl; //Prints Product name--Works
        
    }
    for (int i = 0; i<count; i++){
       //cout<<product[i].getproduct_num()<<endl; //Prints Product number--Works
        
    }
    
}

0 个答案:

没有答案