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

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日

相关文章

  • Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码

    Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码 简介 本文将介绍如何通过Keepalived+Nginx+Tomcat实现高可用Web集群,并提供示例代码。 准备工作 3台服务器,主服务器A和两个备份服务器B和C,可任意选择物理机或虚拟机。 安装CentOS 7.x操作系统。 在每台服务器上安装Nginx和Tomcat,并且确…

    人工智能概览 2023年5月25日
    00
  • TensorFlow实现保存训练模型为pd文件并恢复

    下面是关于“TensorFlow实现保存训练模型为pd文件并恢复”的完整攻略。 保存训练模型为pd文件 准备工作 首先需要确保安装了tensorflow和pandas库。使用conda或者pip命令进行安装: # 安装tensorflow conda install tensorflow # 或者 pip install tensorflow # 安装pan…

    人工智能概论 2023年5月24日
    00
  • Linux系统下Navicat 激活教程详解

    下面我将详细讲解“Linux系统下Navicat 激活教程详解”的完整攻略: Linux系统下Navicat 激活教程详解 前言 Navicat 是一款数据库管理工具,提供了丰富的功能,可以帮助我们高效地管理数据库。而在Linux系统下,Navicat的破解和激活是比较困难的一件事情。本文将为大家详细讲解Linux系统下Navicat的激活教程。 具体步骤 …

    人工智能概览 2023年5月25日
    00
  • Go-RESTful实现下载功能思路详解

    Go-RESTful实现下载功能思路详解 简介 在Web应用程序中,下载功能通常是必需的功能之一。Go是一种功能强大的编程语言,使用它实现RESTful API来实现下载功能非常高效、方便和可靠。在本文中,我们将深入讨论如何使用Go-RESTful库实现下载功能。 步骤 本文将介绍三个主要步骤来实现下载功能: 定义RESTful路由 打开文件并将其发送到客户…

    人工智能概览 2023年5月25日
    00
  • Django 实现admin后台显示图片缩略图的例子

    下面是实现Django admin后台显示图片缩略图的完整攻略。 步骤一:安装必要的依赖库 在本例中,我们将使用 Django-cleanup 和 Pillow 两个库来实现显示缩略图的功能。可以在命令行中使用以下命令进行安装: pip install django-cleanup Pillow 步骤二:处理数据库 假设我们有一个模型名为 Photo,其中有…

    人工智能概览 2023年5月25日
    00
  • OpenCV 3.1.0+VS2015开发环境配置教程

    OpenCV 3.1.0 + VS2015开发环境配置教程 概述 OpenCV是计算机视觉领域常用的开源库,可以提供图像处理、机器学习、数字图像处理等多种功能。本教程将介绍如何搭建OpenCV 3.1.0和VS2015开发环境的完整攻略。 准备工作 Windows 系统 Visual Studio 2015 CMake (下载链接:https://cmake…

    人工智能概览 2023年5月25日
    00
  • 对Python中gensim库word2vec的使用详解

    对Python中gensim库word2vec的使用详解 什么是word2vec? word2vec 是 Google 提出的一个用于学习高效词向量表示并且能够提供大量语义信息的工具。最初 word2vec 基于神经网络的语言模型。它可以接受语料库作为输入,并训练出一个高维空间的向量表示,每一个向量都代表了语料库中的一个单词,向量之间的相似度代表了两个单词在…

    人工智能概论 2023年5月25日
    00
  • javascript实现简单留言板案例

    下面是“javascript实现简单留言板案例”的完整攻略。 留言板的基本实现 接收用户输入的留言内容: <form> <textarea id="message"></textarea> <button id="submit">提交留言</button> &…

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