C++读写(CSV, Yaml, 二进制)文件的方法详解
本文将介绍如何使用C++进行CSV、Yaml和二进制文件的读写操作。在开始之前,应该了解C++的基本语法、文件操作和相应的库的使用,例如fstream、yaml-cpp、boost等。
读写CSV文件
CSV是一种常用的格式,用于存储表格数据。在C++中读取和写入CSV文件,可以使用逗号作为分隔符,并使用fstream库进行操作。
读取CSV文件
以下是一个简单的CSV文件:
name,age,gender
Alice,20,Female
Bob,25,Male
Charlie,30,Male
我们可以使用如下代码读取该文件:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
ifstream fin("example.csv");
if (!fin.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
vector<vector<string>> data;
string line;
while (getline(fin, line)) {
vector<string> row;
size_t pos = 0;
string token;
while ((pos = line.find(',')) != string::npos) {
token = line.substr(0, pos);
row.push_back(token);
line.erase(0, pos + 1);
}
row.push_back(line);
data.push_back(row);
}
fin.close();
for (const auto& row : data) {
for (const auto& cell : row) {
cout << cell << '\t';
}
cout << endl;
}
return 0;
}
输出结果如下:
name age gender
Alice 20 Female
Bob 25 Male
Charlie 30 Male
写入CSV文件
以下会将数据写入CSV文件:
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
ofstream fout("example.csv");
if (!fout.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
vector<vector<string>> data{{"name", "age", "gender"}, {"Alice", "20", "Female"}, {"Bob", "25", "Male"}, {"Charlie", "30", "Male"}};
for (const auto& row : data) {
for (const auto& cell : row) {
fout << cell << ',';
}
fout << endl;
}
fout.close();
return 0;
}
这将创建一个名称为example.csv的文件,其中包含以下内容:
name,age,gender,
Alice,20,Female,
Bob,25,Male,
Charlie,30,Male,
读写Yaml文件
Yaml是一种常用的格式,用于存储结构化数据。在C++中读取和写入Yaml文件,可以使用yaml-cpp库进行操作。
读取Yaml文件
以下是一个简单的Yaml文件:
name: Alice
age: 20
gender: Female
我们可以使用如下代码读取该文件:
#include <fstream>
#include <iostream>
#include <yaml-cpp/yaml.h>
using namespace std;
int main() {
ifstream fin("example.yaml");
if (!fin.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
YAML::Node node = YAML::Load(fin);
fin.close();
cout << "name: " << node["name"].as<string>() << endl;
cout << "age: " << node["age"].as<int>() << endl;
cout << "gender: " << node["gender"].as<string>() << endl;
return 0;
}
输出结果如下:
name: Alice
age: 20
gender: Female
写入Yaml文件
以下会将数据写入Yaml文件:
#include <fstream>
#include <iostream>
#include <yaml-cpp/yaml.h>
using namespace std;
int main() {
YAML::Node node;
node["name"] = "Alice";
node["age"] = 20;
node["gender"] = "Female";
ofstream fout("example.yaml");
if (!fout.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
fout << node;
fout.close();
return 0;
}
这将创建一个名称为example.yaml的文件,其中包含以下内容:
age: 20
gender: Female
name: Alice
读写二进制文件
二进制文件是一种使用二进制编码数据的文件。在C++中读写二进制文件,可以使用fstream库进行操作。
读取二进制文件
以下是一个简单的二进制文件:
#include <fstream>
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
string gender;
};
int main() {
ifstream fin("example.bin", ios::in | ios::binary);
if (!fin.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
Person person;
fin.read(reinterpret_cast<char*>(&person), sizeof(Person));
fin.close();
cout << "name: " << person.name << endl;
cout << "age: " << person.age << endl;
cout << "gender: " << person.gender << endl;
return 0;
}
输出结果如下:
name: Alice
age: 20
gender: Female
写入二进制文件
以下会将数据写入二进制文件:
#include <fstream>
#include <iostream>
using namespace std;
struct Person {
string name;
int age;
string gender;
};
int main() {
Person person{"Alice", 20, "Female"};
ofstream fout("example.bin", ios::out | ios::binary);
if (!fout.is_open()) {
cerr << "Failed to open file." << endl;
return 1;
}
fout.write(reinterpret_cast<const char*>(&person), sizeof(Person));
fout.close();
return 0;
}
这将创建一个名称为example.bin的文件,其中包含以下内容:
0x41 0x6c 0x69 0x63 0x65 0x14 0x00 0x00 0x00 0x46 0x65 0x6d 0x61 0x6c 0x65
其中可以看到数据以二进制形式存储。
总结
本文介绍了如何在C++中读写CSV、Yaml和二进制文件。读取CSV文件时,我们使用逗号作为分隔符,并使用fstream库进行操作;读写Yaml文件时,我们使用yaml-cpp库进行操作;读写二进制文件时,我们使用fstream库进行操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++读写(CSV,Yaml,二进制)文件的方法详解 - Python技术站