首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c++正在读取csv文件

c++正在读取csv文件
EN

Stack Overflow用户
提问于 2013-11-13 01:56:44
回答 3查看 55.5K关注 0票数 9

我想使用c++读取csv文件,所以这是我的代码

代码语言:javascript
代码运行次数:0
运行
复制
 int main(){
 ifstream classFile("class.csv");
 vector<string> classData;

 while (getline(classFile, line,',')) // there is input overload classfile
        {
            classData.push_back(line);  

        }
}

这是我的问题:我的问题是,当它读取每一行的最后一列时(因为它没有用逗号分隔),它读取最后一列数据和下一行的第一个数据,例如,如果我的数据是

className,classLocation,c++教授,图书馆,约翰

然后它会显示为className/ classLocation/ Professor c++/ Library / John

有没有什么办法可以把我的最后一列和下一行的第一列分开?谢谢你,很抱歉这让人迷惑

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-13 02:02:35

逐行阅读文件:

代码语言:javascript
代码运行次数:0
运行
复制
std::string line;
while(std::getline(stream, line)) ...

将每一行传递给istingstream并读取字段:

代码语言:javascript
代码运行次数:0
运行
复制
std::istringstream s(line);
std::string field;
while (getline(s, field,',')) ...

免责声明:这是对csv文件的简化解析。

票数 24
EN

Stack Overflow用户

发布于 2014-07-09 00:19:59

对不起,我可以在这个线程中插入一些普通的C吗?

在这里,csv的阅读非常清晰:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>


int main()
{
  float f1, f2;

  FILE *fp;
  fp = fopen("file.csv", "r");

  while (fscanf(fp, "%g,%g\n", &f1, &f2) == 2)
    printf("%g\n", f1+f2);
}

可以肯定的是,它应该适用于C++工作的地方。

在这里,在while中,我们检查fscanf找到了多少个对象:fscanf(fp, "%g,%g\n", &f1, &f2) == 2 -- fscanf返回它找到的对象数。

我希望这能对某些人有所帮助。

(如果有人想了解更多关于fscanf和阅读文件的信息,请留下一些评论。)

票数 4
EN

Stack Overflow用户

发布于 2018-12-21 16:05:49

如果您对在main部分中调用void函数感兴趣,请查看以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
void readCSV(const string &strPath2Dataset)
{   
    ifstream csvFile;
    string strPathCSVFile = strPath2Dataset + "/test.csv";
    csvFile.open(strPathCSVFile.c_str());

    if (!csvFile.is_open())
    {
        cout << "Path Wrong!!!!" << endl;
        exit(EXIT_FAILURE);
    }

    vector<long double> timeStampIMU;
    vector<long double> gyro_X;
    vector<long double> gyro_Y;
    vector<long double> gyro_Z;

    vector<long double> acc_X;
    vector<long double> acc_Y;
    vector<long double> acc_Z;

    string line;
    vector <string> vec;
    getline(csvFile, line); // skip the 1st line

    while (getline(csvFile,line))
    {
        if (line.empty()) // skip empty lines:
        {
            //cout << "empty line!" << endl;
            continue;
        }

        istringstream iss(line);
        string lineStream;
        string::size_type sz;

        vector <long double> row;

        while (getline(iss, lineStream, ','))
        {  
            row.push_back(stold(lineStream,&sz)); // convert to double
        }

        timeStampIMU.push_back(row[0]);

        gyro_X.push_back(row[1]);
        gyro_Y.push_back(row[2]);
        gyro_Z.push_back(row[3]);

        acc_X.push_back(row[4]);
        acc_Y.push_back(row[5]);
        acc_Z.push_back(row[6]);
    }

    //cout << "size ts = " << timeStampIMU.size() << endl;
    for (size_t i = 0; i < timeStampIMU.size(); i++)
    {
        cout << "ts_imu = " << setprecision(12) << timeStampIMU[i] << endl;

        cout << "gx = " << setprecision(12) << gyro_X[i] << endl;
        cout << "gy = " << setprecision(12) << gyro_Y[i] << endl;
        cout << "gz = " << setprecision(12) << gyro_Z[i] << endl;

        cout << "ax = " << setprecision(12) << acc_X[i] << endl;
        cout << "ay = " << setprecision(12) << acc_Y[i] << endl;
        cout << "az = " << setprecision(12) << acc_Z[i] << endl;
        cout << "--------------------------------" << endl;
    }
}

我的.csv文件是由IMU传感器提供的数据集,用逗号分隔:

代码语言:javascript
代码运行次数:0
运行
复制
TimeStamp, Gyro_X, Gyro_Y, Gyro_Z, Acc_X, Acc_Y, Acc_Z
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19936483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档