gpt4 book ai didi

C++:将CSV文件读入结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:44:12 27 4
gpt4 key购买 nike

我正在做一项作业,我需要将行数未知的 CSV 文件读入结构化数组。只能通过 C++,而不是 C(他们不希望我们将两者结合起来)。

所以,我有以下代码:

// DEFINITION
struct items {
int ID;
string name;
string desc;
string price;
string pcs;
};

void step1() {

string namefile, line;
int counter = 0;

cout << "Name of the file:" << endl;
cin >> namefile;

ifstream file;

file.open(namefile);

if( !file.is_open()) {

cout << "File "<< namefile <<" not found." << endl;
exit(-1);

}

while ( getline( file, line) ) { // To get the number of lines in the file
counter++;
}

items* item = new items[counter]; // Add number to structured array

for (int i = 0; i < counter; i++) {

file >> item[i].ID >> item[i].name >> item[i].desc >> item[i].price >> item[i].pcs;

}

cout << item[1].name << endl;

file.close();
}

但是当我运行代码时,应用程序会在读取后返回空格,实际上我认为它根本没有读取。这是控制台中的输出:

Name of the file:
open.csv

Program ended with exit code: 0

最佳答案

您的第一个循环读取流。当没有其他内容可读时,它会停止。那时,流进入故障模式(即 std::ios_base::failbit 被设置)并且它将拒绝读取任何内容,直到它以某种方式恢复。

您可以使用 file. clear() 将文件恢复到 goid 状态.但是,仅此一点无济于事,因为流仍在尽头。你可以在阅读之前寻求开始,但我不会那样做。相反,我会一次性读取文件并 push_back()每个元素到 std::vector<items> .

请注意,您对每个 items 的输入record 可能不会完全按照您的意愿执行:如果您确实有 CSV 文件,则需要读取分隔符(例如 , )并在读取 ID 后忽略分隔符。此外,您应该始终在阅读后测试流的状态。你的循环可以例如看起来像这样:

for (items i;
(file >> i.id).ignore(std::numeric_limits<std::streamsize>::max(), ',')
&& std::getline(file, i.name, ',')
&& std::getline(file, i.desc, ',')
&& std::getline(file, i.price, ',')
&& std::getline(file, i.pcs); ) {
is.push_back(i);
}

具体需要什么取决于具体的文件格式。

关于C++:将CSV文件读入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com