C++读写(CSV,Yaml,二进制)文件的方法详解

yizhihongxing

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技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Golang开发库的集合及作用说明

    针对“Golang开发库的集合及作用说明”,以下是完整攻略: Golang开发库的集合及作用说明 什么是Golang开发库? Golang开发库是一些经过封装、优化、单独发布并支持使用的独立代码包,能用来加速Golang程序的开发。开发人员可以将Golang开发库引入到自己的程序中,并使用其中的函数、方法和变量来满足自己的需求。 Golang开发库的作用 G…

    人工智能概览 2023年5月25日
    00
  • keepalived对nginx进行高可用搭建及原理详解

    Keepalived对Nginx进行高可用搭建及原理详解 什么是Keepalived Keepalived是一个基于VRRP协议实现的高可用性解决方案,它可以在多台服务器之间实现服务的冗余和负载均衡。它通过模拟一个虚拟的路由器,控制一个IP地址的归属权和转移,从而提高服务的可用性。 Keepalived的工作原理 当多个服务器用Keepalived进行高可用…

    人工智能概览 2023年5月25日
    00
  • 浅析MongoDB 全文检索

    浅析MongoDB全文检索 在MongoDB中进行全文搜索可以使用它的全文索引。MongoDB中的全文搜索可以对文本字段建立索引,对这些字段进行全文搜索。下面将介绍如何在MongoDB中建立全文索引,并进行全文搜索。 建立全文索引 在MongoDB中建立全文索引可以使用文本索引类型。假设我们有一个名为users集合,其中包含一个description字段,请…

    人工智能概论 2023年5月25日
    00
  • pytorch实现逻辑回归

    讲解“pytorch实现逻辑回归”的完整攻略,具体步骤如下: 1. 数据准备 逻辑回归输入数据需要满足以下两个条件: 输入数据是数值型数据; 输出数据是二分类标签,可表示为0或者1,在代码中可用0和1表示。 可以通过使用sklearn库中自带的数据集进行调用,我们这里演示使用Iris数据集作为输入。 from sklearn.datasets import …

    人工智能概论 2023年5月25日
    00
  • MongoDB中MapReduce编程模型使用实例

    下面我将为您详细讲解“MongoDB中MapReduce编程模型使用实例”的完整攻略。 一、MapReduce编程模型简介 MapReduce是分布式计算框架的一种,可以通过MapReduce编程模型对大数据进行处理。MongoDB是一款文档型数据库,支持MapReduce编程模型。 在MongoDB中,MapReduce将一段逻辑处理过程分为Map和Red…

    人工智能概论 2023年5月25日
    00
  • Nginx日志按日期切割详解(按天切割)

    这里是对“Nginx日志按日期切割详解(按天切割)”的完整攻略。 1. 为什么需要按日期切割日志 在网站运行中,生成的日志越来越多,过多的日志文件会占用大量的硬盘空间,同时对服务器的性能也会产生影响。因此需要对日志进行切割,以减小对磁盘空间的占用,同时提高日志的查询效率。而按日期切割日志,可以让我们更好地按时间段查找、归档和处理。 2. 日志切割的方式 我们…

    人工智能概览 2023年5月25日
    00
  • 解决Django数据库makemigrations有变化但是migrate时未变动问题

    解决Django数据库makemigrations有变化但是migrate时未变动问题,可以按照以下完整攻略进行操作: 确认makemigrations是否正确生成了新的迁移文件 首先,需要确认makemigrations命令是否正确生成了新的迁移文件。在执行makemigrations命令后,Django会在app的migrations目录下生成一个新的迁…

    人工智能概览 2023年5月25日
    00
  • TensorFlow 输出checkpoint 中的变量名与变量值方式

    TensorFlow 可以把某个时间点的模型保存到 checkpoint 文件。可以使用 TensorBoard 来可视化 checkpoint,或者通过 TensorFlow API 以编程方式获取 checkpoint 中变量的值。下面分步骤详细讲解 TensorFlow checkpoint 输出变量名和变量值的方式。 1. TensorFlow ch…

    人工智能概论 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部