c ++读取csv文件

pro*_*ard 5 c++ csv

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

 int main(){
 ifstream classFile("class.csv");
 vector<string> classData;

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

        }
}
Run Code Online (Sandbox Code Playgroud)

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

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

然后它读起来像className/classLocation/Professor c ++/Library/John

无论如何,我可以将我的最后一列与下一行中的第一列分开吗?谢谢,抱歉这令人困惑

小智 19

逐行读取文件:

std::string line;
while(std::getline(stream, line)) ...
Run Code Online (Sandbox Code Playgroud)

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

std::istringstream s(line);
std::string field;
while (getline(s, field,',')) ...
Run Code Online (Sandbox Code Playgroud)

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


xea*_*its 5

抱歉,我可以在这个线程中加入一些普通的 C 代码吗?

读取 csv 非常清楚:

#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);
}
Run Code Online (Sandbox Code Playgroud)

毫无疑问,它应该在 C++ 工作的地方工作。

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

我希望这对某人有帮助。

(如果有人想查看更多信息fscanf并阅读文件——请留下一些评论。)

  • 是的,它肯定会破裂。而且,除了 CSV 文件中的空格问题之外,字段的数量在程序中是固定的,而 getline 则不是这样。(不过,通常 CSV 中的字段数量是固定的。) (2认同)