【问题标题】:Can't read .csv file line by line [closed]无法逐行读取 .csv 文件 [关闭]
【发布时间】:2019-12-24 14:12:31
【问题描述】:

我正在尝试逐行读取 .csv 文件

这是我的代码

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
    ifstream fname;
    fname.open("Inc_001.csv");
    if (!fname) { cerr << "Error" << endl; return 1; }
    string x, y;
    while (fname.good()) {
        getline(fname, x, ';');
        getline(fname, y, '\n');

        cout << x << y;
    }
    fname.close();

    return 0;
}

这是我的 .csv 文件

0;0 
0.1;0.01 
0.2;0.04 
0.3;0.09 
0.5;0.25 
0.7;0.49 
1;1

但每次我运行代码时,输​​出都是“错误”,我不知道要解决什么问题

This is a screenshot of my solution

【问题讨论】:

  • 请不要使用错误消息的截图,将它们复制并粘贴到您的问题中。这使得这些错误更容易搜索(你这样做了,对吗?),也让视障人士可以访问它们。顺便说一句:您永远不会验证 getline() 调用是否成功。也就是说,作为这里的新用户,请使用tour 并阅读How to Ask
  • 错误信息是什么?该代码似乎在我的电脑上运行良好,您提供了一个示例 CSV 文件。

标签: c++ visual-studio csv fstream


【解决方案1】:

您总是收到Error 消息的原因是ifstream::open 无法在您指定的路径打开文件。

查看您的屏幕截图,您似乎将 CSV 文件放在了解决方案的根目录中,分类在名为 Source 的过滤器中。

您可以通过更改Project &gt; &lt;your_project&gt; Properties... &gt; Linker &gt; General &gt; Output File 中的位置,然后将CSV 文件放入配置的文件夹中来更改必须放置可执行文件的Output 目录。

或者您可以将您的 CSV 文件放在默认目标目录中,该目录的格式应为 &lt;your_solution_name&gt;\Debug\...,即编译后的二进制文件所在的位置。

【讨论】:

    【解决方案2】:
    float num1, num2;
    char c;
    
    if (myfile.is_open())
    {
        while ( myfile >> num1 >> c >> num2 )
        {
            cout <<  << num1 << "," << num2;
    
        }
        myfile.close();
    }
    

    【讨论】:

    • 你不需要 "if" 也不需要 close 。 . .
    • 通过解释您的答案如何解决相关问题来添加一些上下文,而不是发布仅代码的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多