返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >怎么用C++实现简易的.ini配置文件解析器
  • 810
分享到

怎么用C++实现简易的.ini配置文件解析器

2023-07-05 10:07:59 810人浏览 泡泡鱼
摘要

本篇内容介绍了“怎么用c++实现简易的.ini配置文件解析器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在最开始实例化一个IniHelpe

本篇内容介绍了“怎么用c++实现简易的.ini配置文件解析器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在最开始实例化一个IniHelper 可以使用默认的config.ini文件路径,也可以自己传入一个文件路径(读取指定位置的config.ini)

1.saveIniConfig();将内存中的配置写入config.ini2.LogIniConfig()打印config.ini3.setIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& value);设置sectionName中keyName为value,如果原来没有将会添加4.IniValue getIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& defValue) const; 获取指定位置的config,如果没有,将返回默认值5.bool removeIniConfig(const std::string& sectionName,const std::string& keyName); 删除指定位置的config里面使用到的IniValue重载了类型转换运算符,可以直接转换为std::string

编译使用的是vscode + CMake

代码

Util.h

#pragma once#define NAME_SPACE_START(name) namespace name {#define NAME_SPACE_END() }#include <string>#include <map>#ifndef _UTIL_#define _UTIL_NAME_SPACE_START(INI)#define REMOVE_SPACE(str) \    for(auto it=str.begin();it!=str.end();){    \        if(*it==' ') it=str.erase(it);      \        else break;                         \    }#define INI_FILE_PATH "config.ini"class IniValue{public:    friend class IniHelper;    IniValue();    IniValue(const bool val);    IniValue(const int val);    IniValue(const char* val);    IniValue(const std::string val);    IniValue& operator=(const bool& val);    IniValue& operator=(const int& val);    IniValue& operator=(const char* val);    IniValue& operator=(const std::string& val);    operator bool() const;    operator int() const;    operator std::string() const;private:    std::string m_value;};class IniHelper{private:    std::map<std::string, std::map<std::string, IniValue>> m_map;    std::string m_filePath{INI_FILE_PATH};public:    IniHelper();    IniHelper(const std::string& filePath);    void saveIniConfig();    void LogIniConfig() const;    void setIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& value);    IniValue getIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& defValue) const;    bool removeIniConfig(const std::string& sectionName,const std::string& keyName);protected:    void loadIniFile();    void trim(std::string& str);};NAME_SPACE_END()#endif //!_UTIL_

Util.cpp

#include "Util.h"#include <alGorithm>#include <atomic>#include <cstring>#include <cwchar>#include <exception>#include <fstream>#include <iOS>#include <iostream>#include <iterator>#include <locale>#include <map>#include <ostream>#include <sstream>#include <stdlib.h>#include <streambuf>#include <string>NAME_SPACE_START(INI)IniValue::IniValue(){}IniValue::IniValue(const bool val){    m_value=val?"true":"false";}IniValue::IniValue(const int val){    m_value=std::to_string(val);}IniValue::IniValue(const char* val){    m_value=val;}IniValue::IniValue(const std::string val){    m_value=val;}IniValue& IniValue::operator=(const bool& val){    IniValue temp(val);    m_value=temp.m_value;    return *this;}IniValue& IniValue::operator=(const int& val){    IniValue temp(val);    m_value=temp.m_value;    return *this;}IniValue& IniValue::operator=(const char* val){    m_value=val;    return *this;}IniValue& IniValue::operator=(const std::string& val){    m_value=val;    return *this;}IniValue::operator bool() const{    return m_value=="true"?true:false;}IniValue::operator int() const{    std::stringstream ss(m_value);    int res=0;    ss>>res;    return res;}IniValue::operator std::string() const{    return m_value;}IniHelper::IniHelper(){    loadIniFile();}IniHelper::IniHelper(const std::string& filePath){    m_filePath=filePath;    loadIniFile();}void IniHelper::saveIniConfig(){    std::fstream file;    file.open(m_filePath,std::ios_base::out);    if(file.fail()) return;    for(auto it=m_map.begin();it!=m_map.end();it++){        std::string sectionName="["+it->first+"]\n";        file<<sectionName;        auto keySection = it->second;        for(auto key=keySection.begin();key!=keySection.end();key++){            std::string keyValue=key->first;            keyValue.append("=").append(key->second.m_value).append("\n");            file<<keyValue;        }    }    file.close();}void IniHelper::LogIniConfig() const{    for(auto it=m_map.begin();it!=m_map.end();it++){        std::string sectionName="["+it->first+"]\n";        std::cout<<sectionName;        auto keySection = it->second;        for(auto key=keySection.begin();key!=keySection.end();key++){            std::string keyValue=key->first;            keyValue.append("=").append(key->second.m_value).append("\n");            std::cout<<keyValue;        }    }}void IniHelper::setIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& value){    if(m_map.find(sectionName)==m_map.end()){        std::map<std::string, IniValue> temp;        temp[keyName]=value;        m_map[sectionName]=temp;    }    else{        m_map[sectionName][keyName]=value;    }}IniValue IniHelper::getIniConfig(const std::string& sectionName,const std::string& keyName,const std::string& defValue) const{    if(m_map.find(sectionName)==m_map.end()) return defValue;    std::map<std::string, IniValue> mapping=m_map.at(sectionName);    if(mapping.find(keyName)==mapping.end()) return defValue;    return mapping[keyName];}bool IniHelper::removeIniConfig(const std::string& sectionName,const std::string& keyName){    try {        if(m_map.find(sectionName)==m_map.end()) return true;        auto pos = m_map.at(sectionName).find(keyName);        if(pos==m_map.at(sectionName).end()) return true;        m_map.at(sectionName).erase(pos);        return true;    } catch (std::exception ex) {        //std::cout<<ex.what()<<std::endl;        return false;    }}void IniHelper::loadIniFile(){    std::fstream file;    file.open(m_filePath,std::ios_base::in);    if(file.fail()) return;    std::string sectionName="",t="";    while(std::getline(file,t)){        trim(t);        //去除前后空格        if(t=="\n"||t=="") continue;        else if(t[0]=='['){            sectionName = t.substr(1,t.size()-2);            std::map<std::string, IniValue> p;            m_map[sectionName]=p;        }        else{            if(sectionName=="") continue;            int left=0,right=0,equalPos=0;            equalPos=t.find("=");            if(equalPos==std::string::npos) continue;            std::string keyName="",keyValue="";            keyName=t.substr(0,equalPos);            keyValue=t.substr(equalPos+1,t.size()-1-equalPos);            trim(keyName);            trim(keyValue);            m_map[sectionName][keyName]=keyValue;        }    }    file.close();}void IniHelper::trim(std::string& str){    REMOVE_SPACE(str);    std::reverse(str.begin(), str.end());    REMOVE_SPACE(str);    std::reverse(str.begin(), str.end());}NAME_SPACE_END()

main.cpp

#include <iostream>#include <string>#include "Util.h"using namespace std;using namespace INI;int main(){    IniHelper file("../config.ini");    //file.removeIniConfig("localhost", "name");    file.setIniConfig("localhost", "name", "cxn");    file.LogIniConfig();    file.saveIniConfig();    return 0;}

运行截图

怎么用C++实现简易的.ini配置文件解析器

“怎么用C++实现简易的.ini配置文件解析器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么用C++实现简易的.ini配置文件解析器

本文链接: https://lsjlt.com/news/351140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用C++实现简易的.ini配置文件解析器
    本篇内容介绍了“怎么用C++实现简易的.ini配置文件解析器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在最开始实例化一个IniHelpe...
    99+
    2023-07-05
  • 利用C++实现简易的.ini配置文件解析器
    目录前言代码Util.hUtil.cppmain.cpp运行截图前言 实现了一个比较简单的ini文件解析器,下面介绍一下怎么用的 在最开始实例化一个IniHelper 可以使用默认的...
    99+
    2023-03-09
    C++实现ini配置文件解析器 C++ ini配置文件解析 C++ 配置文件解析
  • Python实现解析ini配置文件的示例详解
    目录楔子ini 文件特殊格式小结楔子 在开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入。这样做是一个好主...
    99+
    2024-04-02
  • 怎么用Python的ini配置文件
    今天小编给大家分享一下怎么用Python的ini配置文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。INI介绍INI是英文...
    99+
    2023-06-29
  • C++实现读写ini配置文件的示例代码
    目录1.概述2.ini格式语法3.配置读取4.demo示例5.自动生成读取代码1.概述 配置文件的读取是每个程序必备的功能,配置文件的格式多种多样,例如:ini格式、json格式、x...
    99+
    2023-05-19
    C++读写ini配置文件 C++读写ini文件 C++ ini文件
  • C#怎么实现读写ini文件
    这篇文章主要介绍了C#怎么实现读写ini文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.创建一个C#项目2.创建一个ini文件在Debug目录下创建一个ini文件,写入...
    99+
    2023-06-28
  • Python中ini配置文件读写的实现
    导入模块 import configparser # py3 写入 config = configparser.ConfigParser() config["DEFAULT"] ...
    99+
    2024-04-02
  • Python的ini配置文件怎么写入
    本文小编为大家详细介绍“Python的ini配置文件怎么写入”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的ini配置文件怎么写入”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。INI介绍INI是英文...
    99+
    2023-06-29
  • C语言读取写入ini配置文件的方法实现
    目录一、了解什么是INI文件?二、INI文件的格式三、解析上述文件四、测试如下一、了解什么是INI文件? ini 文件是Initialization File的缩写,即初始化文件,这...
    99+
    2024-04-02
  • Python配置文件管理之ini和yaml文件读取的实现
    1. 引言 当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。 良好...
    99+
    2023-02-28
    Python ini文件读取 Python ini和yaml文件读取
  • Shell脚本读取ini配置文件的实现方法
    本篇内容介绍了“Shell脚本读取ini配置文件的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简单版参考stackoverfl...
    99+
    2023-06-09
  • 怎么使用C++实现简易服务器
    今天小编给大家分享一下怎么使用C++实现简易服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Server.h#pragm...
    99+
    2023-07-05
  • 怎么使用C语言Iniparser库实现ini文件读写
    这篇“怎么使用C语言Iniparser库实现ini文件读写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用C语言Ini...
    99+
    2023-07-05
  • Python中怎么利用内置模块处理ini配置文件
    Python中怎么利用内置模块处理ini配置文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。注意:本文基于Python  3.9.0(CPython...
    99+
    2023-06-15
  • vscode怎么配置文件解析
    在VSCode中配置文件解析可以通过以下步骤实现: 打开VSCode并打开您的项目文件夹。 在左侧的侧边栏中找到并点击“设置”图标...
    99+
    2024-04-09
    vscode
  • 怎么用Python解析toml配置文件
    举个例子有了 ini 和 yaml,相信 toml 学习来也很简单,先直接看一个例子吧。import toml config = """ title = "toml 小栗子" [owne...
    99+
    2023-05-21
    Python toml
  • 怎么用C#实现简易点餐功能
    这篇文章主要介绍“怎么用C#实现简易点餐功能”,在日常操作中,相信很多人在怎么用C#实现简易点餐功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C#实现简易点餐功能”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • 怎么用C++实现简易的狼人杀游戏
    本篇内容介绍了“怎么用C++实现简易的狼人杀游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!以下是一个基本的狼人杀游戏的C++实现,其中包...
    99+
    2023-07-05
  • vue怎么实现简易计时器组件
    本篇内容主要讲解“vue怎么实现简易计时器组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现简易计时器组件”吧!在做项目中难免会碰到需要实时刷新,广告动画依次出现等等需求,刚最近基...
    99+
    2023-06-20
  • Python中怎么解析配置文件
    这篇文章将为大家详细讲解有关Python中怎么解析配置文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作