C++代码实现读取CSV文件并存储到数组

1星 需积分: 50 122 下载量 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`。