C++读取csv文件并将值分配给数组

2023-12-13

我正在尝试读取 csv 文件并将值分配给二维数组,但我得到了奇怪的结果和一些垃圾值。虽然第一行是正确的,但第二行和第三行就变得奇怪了。

下面是代码:

#include "pch.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    ifstream myFile;
    myFile.open("test.csv");

    int _data[3][3];
    int i = 0;
    int j = 0;

    while (myFile.good())
    {
        string line;
        getline(myFile, line, ',');

        _data[i][j] = stoi(line);
        j++;
        if (j > 3) {
            i++;
            j = 0;
        }
    }

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << _data[i][j] << " ";
        }
        cout << endl;
    }
}

我创建了一个 csv 文件,其中包含以下数据:

1,1,1
1,2,3
3,1,3

我从代码中得到的输出结果是:

1 1 3
3 1 3
-858993460 -858993460 -858993460

我想看看我的循环是否出错,但对我来说似乎很好。


使用固定数组而不是数组会让事情变得更加困难vector of vector<int>对于你的二维数组。另外,为了解析.csv文件,读取每个完整行,然后创建一个stringstream从行中解析getline using ','终止符,然后使用stoi将字段转换为整数值 (C++11) 使过程非常简单。

例如,将要读取的文件名作为程序的第一个参数,您可以将上述内容实现为:

#include <iostream>
#include <fstream>
#include <sstream>

#include <string>
#include <vector>

using namespace std;

int main (int argc, char **argv) {

    string line;                    /* string to hold each line */
    vector<vector<int>> array;      /* vector of vector<int> for 2d array */

    if (argc < 2) { /* validate at least 1 argument given */
        cerr << "error: insufficient input.\n"
                "usage: " << argv[0] << " filename\n";
        return 1;
    }

    ifstream f (argv[1]);   /* open file */
    if (!f.is_open()) {     /* validate file open for reading */
        perror (("error while opening file " + string(argv[1])).c_str());
        return 1;
    }

    while (getline (f, line)) {         /* read each line */
        string val;                     /* string to hold value */
        vector<int> row;                /* vector for row of values */
        stringstream s (line);          /* stringstream to parse csv */
        while (getline (s, val, ','))   /* for each value */
            row.push_back (stoi(val));  /* convert to int, add to row */
        array.push_back (row);          /* add row to array */
    }
    f.close();

    cout << "complete array\n\n";
    for (auto& row : array) {           /* iterate over rows */
        for (auto& val : row)           /* iterate over vals */
            cout << val << "  ";        /* output value      */
        cout << "\n";                   /* tidy up with '\n' */
    }
    return 0;
}

(note:提供的自动内存管理string and vector将允许您读取任何大小的数组(最多达到虚拟内存的限制),而无需事先知道字段数或行数。您可以添加简单的计数器来验证每行包含相同数量的值,等等...)

输入文件示例

$ cat file.txt
1,1,1
1,2,3
3,1,3

使用/输出示例

$ ./bin/iostream_sstream_csv_stoi file.txt
complete array

1  1  1
1  2  3
3  1  3

检查一下,如果您还有其他问题,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++读取csv文件并将值分配给数组 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如果我中断 git add 命令会发生什么?

    我运行了以下命令 git add 由于文件很多 gt 10TB 所以添加需要时间 中途我不小心删除了一些文件 我需要恢复 所以 如果我在终端中执行 Ctrl C 中断 Git 会发生什么 git 中将会有部分添加 我可以使用 git che
  • Git 处理 CRLF(回车、换行)的策略是什么?

    我尝试提交以 CRLF 结尾的行的文件 但失败了 我在 Windows 计算机上花了一整天的时间尝试不同的策略 几乎被吸引停止尝试使用 Git 而是尝试水银 如何正确处理 CRLF 行结尾 在问这个问题近四年后 我终于 成立一个让我完全满意
  • Golang 延迟行为

    有效的行动关于延迟声明如下 延迟函数的参数 如果该函数是方法 则包括接收者 在以下情况下被求值 defer执行 而不是当call执行 除了避免担心函数执行时变量值发生变化之外 这意味着单个延迟调用站点可以延迟多个函数执行 这是一个愚蠢的例子
  • React-router-dom 中 withRouter 的作用是什么?

    I ve 有时看到人们将他们的组件包裹在withRouter当他们出口时 import withRouter from react router dom class Foo extends React Component export de
  • 在重定向之前在 HTTP 中添加自定义标头

    有没有办法在 javascript 触发的 HTTP 重定向中添加自定义 HTTP 标头 我正在寻找可以将自定义标头元素添加到任何重定向的东西 有一种方法可以通过 AJAX 请求来做到这一点 如何使用 js 或 jQuery 将自定义 HT
  • 如何将文件重命名为 google Drive Rest api?改造2

    在Google文档中没有写到它 我使用的是retrofit 2 Help 写下应该发送什么请求以及传输什么参数 界面 PATCH drive v3 files fileId Multipart Call
  • 如何在 Java 中生成连续整数的列表或数组?

    有没有一种简短而甜蜜的方法来生成List
  • Django 1.5 升级后 STATIC_URL 不起作用

    我可能只是累了 没有注意到这里明显的东西 但升级到 Django 1 5 后 我的静态文件的路径被破坏了 设置 py from os path import abspath basename dirname join normpath SI
  • 基质填充块

    在我的课堂上 我们必须制作一个矩阵填充程序 但我对如何使用用户输入来做到这一点感到非常困惑 而且我根本不知道如何做 我尝试开始编码 但无法完成第 1 步 package question4 import java util Random i
  • R,data.table:对名称存储在向量中的所有列求和

    来自数据表d例如 require data table d data table a 1 4 b 11 14 c 21 24 group c 1 1 2 2 我想对名称存储在向量中的所有变量求和varsToSum通过独特的价值观group
  • 如何通过XSLT消除所有和所有attribute=""?

    In a xsl stylesheet我有这种 类似身份 的转换 以消除注释 空 终端 标签和空属性 但是second xsl when不行
  • 如何在 iPhone 中单击按钮时调用 pin 注释

    我不希望直接在地图上调用图钉 我希望通过按钮操作调用图钉注释 当我在按钮单击事件上调用此方法时 我的应用程序崩溃了 我想在单击按钮时调用注释 我可以在按钮上调用所有方法吗 MKAnnotationView mapView MKMapView
  • “不包含四个或更多重复字符”的正则表达式

    我对正则表达式的经验有限 我一直在阅读有关否定和否定前瞻等的各种教程和帖子 但似乎没有什么与我的情况完全匹配 我正在尝试创建一个属性ASP NET MVC3对于密码复杂性 验证的一部分包括最小数量的重复字符 对于当前项目来说 限制是 3 但
  • 将按钮添加到 ui 导航控制器底部栏

    我可以使用以下代码取消隐藏导航控制器底部栏 self navigationController setToolbarHidden NO 但现在我想更改底部栏的颜色 并向该底部栏添加按钮 任何人都可以帮助我如何做到这一点 是否有任何委托方法
  • 水平滚动整个列表视图

    我有一个自定义列表视图 其中包含 14 个字段 如下所示 字段1 字段2 字段3 字段4 字段5 字段6 字段7 字段8 字段9 字段10 字段11 字段12 字段13 字段14 现在明显的问题是我不可能在屏幕上显示所有字段 所以我想让整个
  • python 3 IDLE 中的“语法错误:语法无效”

    为什么这是语法错误 我该如何解决它 class Queue Queue is basicliy a List def init self self queue add to the top of the list the left side
  • C# UTC 到用户当地时间

    我有一个用户可以发帖的网站 用户可能来自全球各地 因此当他们发帖时 我将发布日期存储为 DateTime UtcNow 我正在使用 JQuery 时间前插件来显示类似于堆栈溢出的发布数据 1 分钟前等 但我不确定如何将系统中存储的日期转换为
  • 如何更改相对布局边框颜色?

    如何更改相对布局边框颜色 这是我下面的代码 我只想显示边框颜色黑色 但显示所有相对布局黑色 我只想显示相对布局白色 只有边框是黑色我该怎么办
  • HTML 表单:完成文本字段后将焦点放在复选框上

    查看此 HTML 表单并注意它在文本字段之间有一个复选框 我尝试在移动设备上使用 Chrome 来填充它 并注意到一个意想不到的问题 如果用户在文本字段中键入内容 然后通过按 Android 键盘中的蓝色 完成 按钮移动到下一个字段 焦点将
  • C++读取csv文件并将值分配给数组

    我正在尝试读取 csv 文件并将值分配给二维数组 但我得到了奇怪的结果和一些垃圾值 虽然第一行是正确的 但第二行和第三行就变得奇怪了 下面是代码 include pch h include