📅  最后修改于: 2023-12-03 15:23:07.575000             🧑  作者: Mango
在 C++ 中读取逗号分隔的文本文件是一个常见任务。本文将介绍如何使用 C++ 读取逗号分隔的文本文件并将其存储为向量或数组。我们将使用标准的文件读取函数和字符串操作函数来处理逗号分隔的数据。
在开始之前,您应该熟悉基本的 C++ 语法和文件读取操作。你还应该知道如何使用 C++ 标准库中的字符串和向量。
本文中的示例数据将包含以下内容:
Alice,Smith,23
Bob,Johnson,31
Charlie,Brown,57
每行包含三个逗号分隔的值:名字,姓氏和年龄。我们将使用这些数据作为示例数据。
要读取逗号分隔的数据,我们需要从文件中读取每一行并将其拆分为个别的值。为此,我们可以使用 C++ 的 getline()
函数。我们可以将其与字符串流一起使用,以便更方便地处理每个逗号分隔的值:
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
int main()
{
std::vector<std::vector<std::string>> data; // 存储每行数据
std::ifstream file("data.csv"); // 打开文件
std::string line, value;
while (getline(file, line)) // 逐行读取文件
{
std::vector<std::string> row; // 存储一行的数据
std::stringstream ss(line); // 将行数据转换为字符串流
while (getline(ss, value, ',')) // 逐个读取逗号分隔的值
{
row.push_back(value); // 添加到行数据中
}
data.push_back(row); // 添加到总数据中
}
file.close(); // 关闭文件
// 使用 data ...
}
在此示例中,我们定义了一个名为 data
的二维字符串向量,用于存储每行数据。我们打开名为 data.csv
的称为“data.csv”的文件,并使用 getline()
函数逐行读取文件。对于每个读取的行,我们定义一个名为 row
的字符串向量,并将其清空以存储该行的数据。我们使用 stringstream
将行数据转换为字符串流,并使用 getline()
函数逐个读取逗号分隔的值。将每个值添加到 row
后,我们将其添加到总数据 data
中。
一旦我们已经读取所有数据,我们就可以关闭文件并使用 data
进行进一步处理。
如果您希望将逗号分隔的数据存储为数组而不是向量,您可以使用以下代码示例:
#include <fstream>
#include <sstream>
#include <string>
const int MAX_ROWS = 100;
const int MAX_COLS = 3;
int main()
{
std::string data[MAX_ROWS][MAX_COLS]; // 存储每个值
int row = 0, col = 0; // 当前元素的行和列
std::ifstream file("data.csv"); // 打开文件
std::string line, value;
while (getline(file, line)) // 逐行读取文件
{
std::stringstream ss(line); // 将行数据转换为字符串流
while (getline(ss, value, ',')) // 逐个读取逗号分隔的值
{
data[row][col] = value; // 存储值
col++; // 移动到下一个元素
}
row++; // 移动到下一行
col = 0; // 重置列
}
file.close(); // 关闭文件
// 使用 data ...
}
在此示例中,我们定义了一个名为 data
的二维字符串数组,用于存储每个逗号分隔的值。我们使用 MAX_ROWS
和 MAX_COLS
定义了数组的大小。我们逐行读取文件,并使用一个名为 col
的变量来跟踪我们在行中的当前元素位置。对于每个逗号分隔的值,我们将其添加到当前位置,然后将 col
增加到下一个位置。对于每一行,我们将 row
增加到下一行,并将 col
重置为零。
使用 C++ 读取逗号分隔的文本文件是一项不错的技能。在处理逗号分隔的数据时,我们可以使用字符串流和向量来处理数据。我们还可以将数据存储为数组以进行进一步使用。希望这篇文章能帮助您更好地了解如何在 C++ 中读取逗号分隔的文本文件。