C++ 中如何将 CSV 文件中的数据读入二维数组?

2025 年 5 月 21 日 | 阅读 4 分钟

CSV文件格式,即“逗号分隔值”(Comma-Separated Values),常用于存储和交换表格数据。

  • 在CSV文件中,数据以纯文本形式按行和列组织。
  • CSV文件由按行和列组织的纯文本数据组成。

每一行代表一条记录,每一列代表该记录的一个字段或属性。在CSV文件中,值由逗号分隔(定界),不过分号和制表符也是可接受的分隔符。

示例

输入

CSV 文件 = "data.csv"

//它包含: 1, Employee1, Haskell 2, Employee2, CSS 3, Employee3, Javascript

输出

二维数组的元素是: { {1, Employee1, Haskell},

{2, Employee2, CSS},

{3, Employee3, Javascript} }

CSV文件的特点

C++中CSV文件的几个特点如下:

  1. CSV文件简单轻量,易于创建、编辑和处理。
  2. 它们是人类可读的,可以用文本编辑器打开和编辑。
  3. CSV文件主要用于存储原始数据;它们不支持格式化或复杂的数据类型,如图像或公式。

CSV文件的用途

C++中,CSV文件的几种用途如下:

  1. CSV文件常用于在各种软件应用程序之间存储和交换数据。
  2. 像Microsoft Excel这样的电子表格程序、数据库管理系统编程语言都广泛支持它们。
  3. CSV文件用于各种任务,包括数据备份、导入/导出以及跨系统共享。

使用的头文件

  1. <iostream>: 该模块提供基本的输入/输出流功能,是处理控制台输入/输出所必需的。
  2. <fstream>: 它通过提供文件输入/输出操作,允许程序与外部文件进行交互。
  3. <sstream>: 它通过字符串流处理,允许对字符串数据进行操作和解析。
  4. <string>: 它提供了string类及相关方法,用于操作字符串,这对于处理CSV数据至关重要。

使用 std::getline 和 std::istringstream 在 C++ 中读取 CSV 文件

  1. std::istringstream
    读取一行后,会根据该行创建一个字符串流(std::istringstream)。它允许将该行视为一个字符流。
  2. std::getline
    通过再次调用std::getline并提供逗号作为分隔符,可以从字符串流中提取标记(token)。它将行分割成单个标记,每个标记代表一个用逗号分隔的值。

什么是二维数组?

二维数组(2D array)是C++中的一种数据结构,它以类似于网格的方式组织元素。与一维数组(元素的线性集合)不同,二维数组由行和列组成,形成一个网格或矩阵。

示例

代码实现

输出

ERROR!
Error: Unable to open the file!   

说明

  • 这段C++代码从一个CSV文件读取数据到一个二维数组中。
  • 它首先为数组的最大行数和列数创建常量,并包含所需的头文件。代码使用输入文件流打开CSV文件,并验证文件是否成功打开。
  • 之后,它遍历CSV文件中的每一行,使用逗号作为分隔符对每一行进行分词,并使用std::stoi()函数将每个标记从字符串转换为整数。数据存储在二维数组data[][]中,并使用行和列索引来跟踪数据在数组中的位置。
  • 当所有数据都读取完毕后,文件流被关闭。最后,它逐行打印存储在二维数组中的信息,每个元素之间用一个空格隔开。这个过程会一直持续到所有行都被打印出来。

复杂度分析

时间复杂度: O(R * C)

其中R和C分别是行数和列数。

空间复杂度: O(R * C)