gpt4 book ai didi

c++ - 使用 getline 读取 .csv 文件时遇到问题

转载 作者:行者123 更新时间:2023-11-27 23:36:03 25 4
gpt4 key购买 nike

我的程序的一部分包括尝试从 .csv 文件中读取行并将其部分存储到结构中。然而,当我尝试执行下面显示的代码时,控制台告诉我存在一个无效的 stod 实例。有了这些信息,我进入了调试器,发现没有从文件中读取任何内容到我创建的虚拟变量(part1 - part4),它们只是具有 的值” " 仍然。

我正在阅读的 .csv 中的示例行是:

"Photo Editor & Candy Camera & Grid & ScrapBook,ART_AND_DESIGN,4.1,159,19M,10;000+,Free,0,Everyone,Art & Design,January 7; 2018,1.0.0,4.0.3 and up"

我只想知道它说 “159”(也就是评论数)。

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

using namespace std;

struct App {
std::string name;
std::string category;
double rating;
int reviewNum;
};

void readData(App appList[], const int size) {

ifstream inFile;
inFile.open("googleplaystore.csv");

if(inFile.fail()) {
cout << "File open error!";
exit(0); //Close program
}

for(int appIndex = 0; appIndex < size; appIndex++) {

string part1, part2, part3, part4, trash = "";
//Line1
getline(inFile, part1, ','); //read until ,
getline(inFile, part2, ',');
getline(inFile, part3, ',');
getline(inFile, part4 , ',');
getline(inFile, trash); //read until end of line

appList[appIndex].name = part1;
appList[appIndex].category = part2;
appList[appIndex].rating = stod(part3);
appList[appIndex].reviewNum = stoi(part4);

if(inFile.fail()) {
cout << "File read error!";
exit(0); //Close program
}

}

int main()
{
cout << fixed << setprecision(1);

App appList[NUM_RECORDS] = {};

readData(appList, NUM_RECORDS);
}

最佳答案

您的程序进行了不正确的错误检查。它尝试读取文件末尾,失败,忽略错误,然后尝试将不存在的输入字符串转换为 double。这会因异常而失败。

在程序尝试执行所有这些操作之后检查文件为时已晚。

在每个 IO 操作完成后立即检查是否成功。

一种流行的方法是逐行读取输入,tgen 分别解析每一行,例如就像下面的代码片段一样。

while (std::getline(infile, instring)) {
std::istringstream linestream (instring);
// read the linestream
}

关于c++ - 使用 getline 读取 .csv 文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59122904/

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