我正在阅读一个看起来像这样的文本文件:
1|Pink Floyd
2|Genesis
3|Einaudi
4|Melanie C
我有一个矢量artistVector来存储ID(整数)和Artist Name char(100)。
我正在尝试解析文本文件并存储已解析的ID和名称,如下所示:
artistVector[0] = 1
artistVector[1] = Pink Floyd
artistVector[2] = 2
artistVector[3] = Genesis
artistVector[4] = 4
artistVector[5] = Einaudi
artistVector[6] = 6
artistVector[7] = Melanie C
但由于某种原因,我在Pink Floyd之后的代码不能使用我的sqlite插入记录功能。
static vector<string> readFile(vector<string> artVec, ifstream &iFile) //Read the file into the vector function definition
{
vector<string> vector;
string line;
if (iFile.is_open()) {
while (!iFile.eof()) {
// read an item using | as a delimiter
//getline(artist, line, '|');
getline(iFile, line, '|');
vector.push_back(line);
getline(iFile, line, '\n');
vector.push_back(line);
getline(iFile, line, '\n');
vector.push_back(line);
}
}
else {
cout << "Unable to open file";
}
return vector;
}
int main() {
vector<string> artistVector;
ifstream artistFile("artist.txt"); //Input file
artistVector = readFile(artistVector, artistFile);
std::string sqlArtistInsert[8];
for (int i = 0; i < artistVector.size(); i++) {
sqlArtistInsert[i] = artistVector[i];
}
cout << sqlArtistInsert[0] << endl;
cout << sqlArtistInsert[1] << endl;
cout << sqlArtistInsert[2] << endl;
system("pause");
return 0;
}
我的输出如下:
1
Pink Floyd
2
请注意Pink Floyd和2之间的空白区域?又名sqlArtistInsert [1]&amp; sqlArtistInsert [2]
请查看下面的代码,我们非常感谢您的帮助!
答案 0 :(得分:0)
我看到的问题:
while
循环
while (!iFile.eof()) {
// read an item using | as a delimiter
//getline(artist, line, '|');
getline(iFile, line, '|');
vector.push_back(line);
getline(iFile, line, '\n');
vector.push_back(line);
getline(iFile, line, '\n');
vector.push_back(line);
}
对getline
的最后一次通话将会读取另一行文字。第一次执行循环时,
line
的第一次通话中, "1"
将被分配getline
在line
的第二次通话中,"Pink Floyd"
将被分配getline
在line
的第三次调用中,"2|Genesis"
将被分配getline
。
我确信这不是你的意图。删除循环中对getline
的第三次调用。
另一个问题是,您最终会在vector
中存储的项目数量超过文件中的数量。有关更深入的说明,请参阅Why is iostream::eof inside a loop condition considered wrong?。你的循环必须是这样的:
while (getline(iFile, line, '|')) {
vector.push_back(line);
getline(iFile, line, '\n');
vector.push_back(line);
}
sqlArtistInsert
中<{1}}的尺寸不足
当前大小为main
时,由于8
循环中的问题,程序使用的内存超出了有效限制。固定while
循环后,这不再是问题。
为了安全起见,我会使用:
while