我编写了一个程序,只是检测.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");
}
答案 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::istringstream
和std::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.
}