C++代码实现读取CSV文件并存储到数组
1星 需积分: 50 83 浏览量
更新于2024-09-08
7
收藏 1KB TXT 举报
"C++编程,读取CSV文件数据并存储到数组中"
在C++编程中,处理CSV(Comma Separated Values)文件是常见的任务,尤其在数据分析、数据导入导出等场景下。CSV文件是一种简单文本格式,用于存储表格数据,每一行代表一行记录,列之间用逗号分隔。本示例代码展示了如何读取CSV文件并将数据存储到数组中。
首先,我们需要包含必要的头文件来支持文件操作、输入输出流、字符串处理以及向量容器的使用:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
```
`using namespace std;` 语句允许我们在代码中省略 `std::` 前缀,简化代码可读性。
接下来,定义一个辅助函数 `Trim`,用于去除字符串两端的空白字符(包括换行符、制表符和回车符):
```cpp
string Trim(string& str) {
str = str.find_first_not_of("\t\r\n"); // 移除字符串开头的空白字符
str.erase(0, str.find_first_not_of("\t\r\n")); // 移除字符串开头的空白字符
// str.erase(str.find_last_not_of("\t\r\n") + 1); // 移除字符串结尾的空白字符,此处未使用
return str;
}
```
在 `main` 函数中,我们创建一个双精度浮点数数组 `x` 来存储CSV数据,并声明一个 `ifstream` 对象 `fin` 用于打开CSV文件:
```cpp
double x[1024];
int i = 0;
ifstream fin("hao3-1.csv"); // 打开CSV文件
```
然后,我们使用 `getline` 函数逐行读取文件内容,直到文件结束。每读取一行,我们创建一个 `istringstream` 对象 `sin` 用于解析该行内容,再创建一个 `vector<string>` 容器 `fields` 保存解析后的字段:
```cpp
string line;
while (getline(fin, line)) { // 逐行读取文件内容
// ...
istringstream sin(line); // 将一行内容转换为istringstream
vector<string> fields; // 存储字段的vector
string field;
while (getline(sin, field, ',')) { // 以逗号为分隔符提取字段
fields.push_back(field); // 将字段添加到vector中
}
// ...
}
```
接下来,我们将解析出的数据(假设是双精度浮点数)转换并存储到数组 `x` 中:
```cpp
string num = fields[0]; // 取第一个字段作为数值
x[i] = atof(num.c_str()); // 将字符串转换为double并存入数组
i = i + 1;
```
最后,我们遍历数组 `x` 并打印其所有元素,以便验证数据已正确读取和存储:
```cpp
for (int j = 0; j < 1024; j++) {
cout << x[j] << endl;
}
```
程序结束时,`system("pause")` 会暂停程序执行,等待用户按键后再继续,这通常用于调试或确保程序窗口不会立即关闭。
这个例子展示了基本的C++ CSV文件处理技巧,包括文件输入流、字符串流的使用,以及数据类型转换。然而,实际应用中,为了处理更复杂的情况,如错误处理、不同类型的字段和更复杂的分隔符,可能需要使用专门的库,例如 `libcsv` 或 `boost spirit`。
2022-07-14 上传
2020-09-04 上传
2020-04-27 上传
2023-09-27 上传
2023-06-03 上传
2023-07-09 上传
xueleiok
- 粉丝: 2
- 资源: 4
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能