将.csv文件的单元格中的数据复制到c ++算法中的字符串中

时间:2013-12-15 10:11:26

标签: c++ csv structure

我编写了一个程序,只是检测.csv文件中的逗号并将数据复制到一个结构中......但是它还检测每个单元格文本中的逗号,就好像我有一个burgerking,AK在一个单元格中然后它还会检测burgerking和AK之间的逗号,这使得很难将一个单元格中的数据复制到结构中的字符串数组中,这样任何人都可以帮助我将.csv文件中每个单元格中的数据复制到一个字符串文件中。 c ++中的结构

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>


    using namespace std;
    struct burgerking  //structure containing different strings for each column in .csv file
    {
string longitude[7000];
string latitude[7000];
string location[7000];
string state[7000];
string address[7000];
    };


    void main () {
burgerking *burger;
burger= new burgerking();
string line;
ifstream myfile;
myfile.open("burgerking.csv"); //opening the csv file
if(myfile.good())
    cout<<"File is Good to be opened"<<endl;
int l=0;   //longitude
int n=1;   //latutude
int e=2;   //location
int ss=3;  //state
int ad=4;  //address
int j=0;
int b=0;
int kk=0;
int ll=0;
int add=0;
string line1;
string line2;
string line3;
for(int i=0;i<1500;i++)
{
    getline(myfile,line,',');
    if(i==0)
    {
        burger->longitude[j]=line;
        j++;
        l=l+7;
    }
    if(i==l)
    {
        burger->longitude[j]=line.substr(16,line.length());
        j++;
        l=l+7;
    }
    if(i==n)
    {
        burger->latitude[b]=line;
        n=n+7;
        b++;
    }
    if(e==i)
    {
        burger->location[kk]=line;
        kk=kk+1;
        e=e+7;
    }
    if(ss==i)
    {
        burger->state[ll]=line;
        ss=ss+7;
        ll++;
    }

}
myfile.close();
myfile.open("burgerking.csv");
for(int c=0;c<2000;c++)
{
    getline(myfile,line,',');
    if(ad==c)
    {

        getline(myfile,line1,',');
        getline(myfile,line2,',');
        getline(myfile,line3,',');
        line3=line3.substr(0,16);
        burger->address[add]=line+','+line1+','+line2+','+line3;
        add++;
        ad=ad+4;

    }
}

for(int k=0;k<300;k++)// loop just to check the program output
{
    cout<<'\t'<<'\t'<<k+1<<endl;
    cout<<burger->longitude[k]<<" ";
    cout<<burger->latitude[k]<<" ";
    cout<<burger->location[k]<<" ";
    cout<<burger->state[k]<<" ";
    cout<<burger->address[k]<<endl<<endl<<endl; //just to check the output 
}



myfile.close();
system("PAUSE");

}

1 个答案:

答案 0 :(得分:0)

我会说你错了。

从结构开始不应该包含字符串数组,而是每个商店应该有一个结构 instance ,然后将它们存储在std::vector中:

所以

struct burgerking
{
    std::string longitude;
    std::string latitude;
    std::string location;
    std::string state;
    std::string address;
};

std::vector<burgerking> stores;

然后在阅读文件时,您使用std::getline获取完整的一行,并使用std::istringstreamstd::getline来获取单独的值:

std::string line;
while (std::getline(myfile, line))
{
    std::istringstream iss(line);

    burgerking burger;  // No pointers needed

    std::getline(iss, burger.longitude, ',');
    std::getline(iss, burger.latitude, ',');
    std::getline(iss, burger.location, ',');
    std::getline(iss, burger.state, ',');
    std::getline(iss, burger.address);   // Last field, no separator needed

    stores.push_back(burger);  // Add to collection
}

最后当你打印出来时,请使用例如

for (const burgerking& b : stores)
{
    std::cout << "Longitude: " << b.longitude << '\n';
    // Etc.
}