ConfigEngine使用示例

2023-11-15

ConfigEngine使用示例

  • 前提:本系统基于公开的原则,采用了Python作为开发语言。因此你需要下载安装Python环境才能运行本系统。

    当然,你还需要下载一份最新的ConfEngine配置编译引擎。地址在这里:

    http://code.google.com/p/confengine/downloads/list

    简要过程如下:

    • 步骤1: 下载安装Python运行环境
    • 步骤2: 下载ConfEngine最新版本。解开到一个目录中。
    • 步骤3: 编写你的配置定义文件 raw.f。
    • 步骤4: 调用ConfEngine里的genconf.py编译raw.f,生成raw.h.
    • 步骤5: include "raw.h"。 使用AppRaw().来访问你的配置相关的功能。

    第一步,定义需要的配置项,保存在raw.f

    • 注意这里文件名取为raw.f, 其中的raw会被当作名称的一部分。因此如果你想定义多个独立的配置系统的话,需要精确的选择这个名字。而.f的扩展名,是本系统的建议扩展名,你硬要换也没关系。

      raw.f 文件按的类容如下:

      • ; System配置范围
        s 	system:account:agnet		firefox		dd
        s 	system:account:username		"zhang san"	default user name
        b 	system:account:remember		0.0		  	remember last logon user?
        n	system:account:retry		3756		fail count allowed before exit.
        n	system:registered		0		is this copy copyleft?
        
        ; 顶级配置项
        b	lastupdate			12345678	last date for update.
            

      raw.f文件的解释如下:

      • 文件的每一行为一个配置项。
      • 空行只是为了添加可读性,实际处理被略过。
      • 以分号开始的行为注释行,实际处理也被略过。
      • 配置项的每一行,分为3~4个列,每一列用空白(空格或者Tab)分开。
        • 第一列为单个字符,表明数据类型,如s表示字符串;b表示布尔值;n表示数值。

          第二列为可分层次的配置项。每一层之间用:区分(早期曾用'/'区分,但是在某些环境下引起歧义,新版本改为用':')。

          • 分层可以理解为按名字空间组织。
          • 层间用':'分割,最后一项为实际配置项
          • 也可以不使用分层,直接使用配置项。
          • 注意不要混合层名字和配置项名字。
            • 如:如果定义了system:account:username
            • 配置项为username, 他的层次为system.account。
            • 这个时候你仍可以定义其他的层次,和其他层次的配置项,如 system:agent:proxy;或者system:lastupdate。
            • 但是不能再定义 system:account了。因为account已经是system的子层次,不能再是配置项了。

          第三列为默认值。注意列是由空白分开的,所以如果默认值中包含空格的话(字符串类型),就需要用双引号包含起来。类似长路径名的处理。

          第四列是可选的,表示注释项。注意这是最后一项,因此不再考虑空白区分,所有第三列以后的剩余内容,都认为是第四列的。

      • 目前只支持s, b, n三种类型,大概可以涵盖绝大部分的用途了。

    第二步,调用ConfEngine编译raw.f。  如:E:/confengine/genconf.py   E:/dev/marvel/raw.f

    • genconf.py 编译raw.f后,如果raw.f没有语法错误,会生成raw.h(注意名称一致)。同时如果需要的话,会拷贝一份公用类定义文件baseconf.h到raw.h的目录。

       

      可以手工运行,可以看看他的命令行输出的信息。 了解这个过程后,就可以直接把raw.f文件和genconf.py关联起来,没必要每次手工运行了。

       

      这里有三个文件:

      raw.f

      raw.h

      baseconf.h。

       

      raw.f是你的定义文件,应该加入到你的工程里面。如果有版本管理系统的话,也应该加入到版本管理系统里面。

      raw.h 和 baseconf.h 是编译raw.f产生的文件,就像编译 .cpp产生的.obj文件一样,是没必要加入到工程和版本管理里面的。

       

       

      • 有时候.h不加入到工程里面,他里面的代码自动完成提示就不完全。这个时候可以将raw.h和baseconf.h加入到工程里。

         

        加raw.h或者baseconf.h或者同时加入到工程,视你的习惯而定。他们仅仅起自动完成提示的作用,除此外,是完全不必加入到工程里面的。

         

        加入到代码管理则是完全不必要的,因为他的内容完全决定于raw.f。

      生成的baseconf.h是公用类容,不必理会。生成的raw.h是你要的内容, 最好include到你的全局头文件定义里。 如stdafx.h 或者 YourApp.h 等里面。

      建议:

          将raw.f 加入你的工程,然后设定自定义编译选项,这样子每次修改raw.f,编译时就能自动即时的反应更改了。 设定自定义编译选项,VC6的操作如下:在Project的FileView中,选择raw.f, 右键点击弹出上下文菜单,选择settings;在打开的project settings里,选择 custom build 选项页。 在commands里面,输入编译命令, 如 genconf.py $(InputName), outputs里面,填入生成的文件,这里是raw.h。确定即可。

       

          这里genconf.py假定在可以找到的目录下,否则要加上全路径。

      raw.h里面会定义一个 AppRaw();的函数(),其中App是固定前缀,Raw来自于定义文件。 这个函数会返回一个CRaw& 类引用。 类的名称一看就知道,而类的类容则包含了配置项的所有内容。

    第三步,享受你轻便简洁的配置访问功能。

    • 示例如下:
      • 当然,先要包含头文件。  #include "raw.h"

        在程序初始化时,载入全局配置项。代码为

         

        AppRaw().LoadGlobal();

        你可以选择是否继续载入其他的用户或者OEM自定义项,如:

         

        AppRaw().LoadUserProfile("lenovo.conf");

        AppRaw().LoadUserProfile("Optimization.conf");

        可以直接或间接的访问配置项:

         

          int i = AppRaw().system.account.retry;

         

          if (3 < AppRaw().system.account.retry) ...;

        • 注意到没有,代码一目了然的逻辑层次,体现了层次分明的配置项的强大优势。
        • 而且,你无需记住配置的详细内容,由于有层次,只需要打一个点,自动完成就会列出接下来的所有项。

        不止是读取这么简单,你还可以修改它:

         

        AppRaw().system.account.retry = 33;

        或者在弹出系统选项设置对话框时,你还可以提供一个复位(恢复默认值)的按钮,同样很简单。只需要调用配置项的reset即可:

         

        AppRaw().system.account.retry.Reset();

        或者你不想挨个复位每个配置项,你可以一次复位一个层次的所有配置项,如:

         

        AppRaw().system.account.Reset();

        或者调用顶层的reset,复位所有的配置项:

         

        AppRaw().Reset();

         

        在修改了你的配置,或者复位了一些项之后,你需要将配置保存到配置文件中。

        你可以调用:

         

        AppRaw().WriteGlobalProfile();

         

        保存一份全局配置文件。 也可以仅仅是保存用户修改部分,作为用户配置文件,如:

         

        AppRaw().WriteUserProfile("Optimization.conf");

         

         

        • 全局配置文件和用户配置文件的区别
          • 1. 全局配置文件只有一个;用户配置文件数目不限。

            3. 全局配置文件保存了所有的配置项,不管是否是默认值;用户配置文件仅保存不是默认值的配置项。

            4. 由于用户配置文件需要指定名字,因此需要特别注意读取和保存的文件名的一致。

            2. 全局配置文件名字固定为exe的名字,仅扩展名变为.conf,因此无需指定;用户配置文件需要指定名字,但是需要注意到不要跟exe名字相同,因为全局配置文件已经占用了这个名字。

        • 用户配置文件可以不带路径,默认是在.exe所在目录下。但是带完整路径也是可以的。

    后记,看看最终用户看到配置文件是什么样子的:

    • 注:下面的配置文件并不是来源于raw.f。而是来自于一个真实的项目的一小部分,这些内容全是由配置引擎完成的,程序员完全无需关注。可以看到他完备的注释让最终用户也一目了然。

       

      # 主窗口位置左, Default value: 0

      MainWnd:Area:l=363

       

      # 主窗口位置上, Default value: 0

      MainWnd:Area:t=140

       

      # 主窗口位置又, Default value: 800

      MainWnd:Area:r=1386

       

      # 主窗口位置下, Default value: 600

      MainWnd:Area:b=967

       

      # 浮动窗口方式 0: 自动隐藏,漂浮在鼠标位置; 1: 固定位置显示; 2: 停靠在主窗口右侧; 3: 停靠在主窗口下侧; 4: 停靠在主窗口上侧, Default value: 1

      FloatWnd:Dock=1

       

      # 浮动窗口自动隐藏模式位置宽, Default value: 700

      FloatWnd:ModeAuto:cx=700

       

      # 浮动窗口自动隐藏模式位置高, Default value: 300

      FloatWnd:ModeAuto:cy=300

       

      # 浮动窗口固定模式位置左, Default value: 700

      FloatWnd:ModeFix:l=700

       

      # 浮动窗口固定模式位置上, Default value: 300

      FloatWnd:ModeFix:t=300

       

      # 浮动窗口固定模式位置又, Default value: 1024

      FloatWnd:ModeFix:r=1024

       

      # 浮动窗口固定模式位置下, Default value: 500

      FloatWnd:ModeFix:b=500

       

      # 浮动窗口右侧停靠模式宽, Default value: 500

      FloatWnd:ModeRight:cx=500

       

      # 浮动窗口下侧停靠模式高, Default value: 500

      FloatWnd:ModeBottom:cy=500

       

      # 浮动窗口上侧停靠模式高, Default value: 700

      FloatWnd:ModeTop:cy=700

       

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ConfigEngine使用示例 的相关文章

随机推荐

  • 前端追梦人CSS教程

    一 基础概念 1 1 什么是CSS 层叠样式表 英文全称 Cascading Style Sheets 是一种用来表现HTML 标准通用标记语言的一个应用 或XML 标准通用标记语言的一个子集 等文件样式的计算机语言 1 2 语法 选择器
  • 腾讯T3亲自教你,338页网易面经

    前言 19年6月份从网易云音乐离开 放弃了留学机会 开始了人生的第一次创业 前后尝试了两个项目 因为个人能力与时机因素都失败了 虽然没能享受到创业所能够带来高杠杆物质上的回报 但是对个人软技能和自我边界认知上都有了很大的提升 投递公司与拿到
  • ROS环境下大疆tello无人机源码安装&驱动代码解读

    大疆tello无人机是一款微小型无人机 可以支持多种开发模式 这里用的是ROS1的kinetic版本进行开发 参考文档来自http wiki ros org tello driver 1 kinetic下tello源码安装 打开终端 键入以
  • 开发 web 服务程序

    github 任务目标 熟悉 go 服务器工作原理 基于现有 web 库 编写一个简单 web 应用类似 cloudgo 使用 curl 工具访问 web 程序 对 web 执行压力测试 根据代码提示 按照cloud go应用 编写相应的W
  • 把WPS/Excel里的单元格为图片url链接转换为图片显示

    原始数据 步骤 可以创建新的一列作为显示图片用 修改下表格的单元格行高和行宽 这里有个技巧 我们点击下表格的左上角的三角符 再拉动行高 这样会自动修改每一个行高 我们准备给图片设置成50x50像素 大概也就是2cmx2cm 下面我们给B2里
  • 矩阵求导、几种重要的矩阵及常用的矩阵求导公式

    矩阵求导 几种重要的矩阵及常用的矩阵求导公式 Norstc的博客 CSDN博客
  • 服务器文件主从实时同步

    服务器列表 1 主 192 168 199 230 2 从 192 168 199 183 192 168 199 105 第一步 分别配置好SSH免登陆 参考 点这里 第二步 分别装好 rsync yum y install rsync
  • PDF颜色翻转以方便打印处理

    用于将黑色背景的pdf笔记转成白色背景 方便打印 使用到PyMuPDF库 pip install PyMuPDF 代码如下 import datetime import os from PIL import Image import PIL
  • <转>javascript之Object.assign()痛点

    最近也一直会用JavaScript 然后中间使用的一些组件 如Echarts 会有非常复杂的配置文件 而大部分配置可能都是一样的 所以想着写一份通用配置 然后 其他地方需要使用的时候 用这份配置深拷贝一份配置 然后在上面继续改 就如下 co
  • 独家

    转自 http nooverfit com wp E7 8B AC E5 AE B6 EF BD 9Cgan E5 A4 A7 E7 9B 98 E7 82 B9 EF BC 8C E8 81 8A E8 81 8A E8 BF 99 E4
  • 哈希密码的加盐强化

    点进来你就是我的人了博主主页 戳一戳 欢迎大佬指点 欢迎志同道合的朋友一起加油喔 目录 一 什么是哈希加密 二 哈希加密的问题 三 加盐哈希加密 四 Java中的加盐哈希加密实践 1 加盐加密代码实例 2 验证加盐加密的密码代码实例 五 M
  • (十一)python网络爬虫(理论+实战)——html解析库:BeautfulSoup详解

    系列文章 python网络爬虫专栏 目录 序言 本节学习目标 特别申明
  • yolov5目标检测多线程Qt界面

    上一篇文章 yolov5目标检测多线程C 部署 V1 基本功能实现 mainwindow h pragma once include
  • 超越 EfficientNet与MobileNetV3,NeurIPS 2020 微软NAS方向最新研究

    编者按 随着深度学习的发展 神经网络结构的设计逐渐由手工设计转变为算法自动设计 在近期的神经网络设计 Neural Architecture Search NAS 研究中 现有的方法存在一定缺陷 结果往往不能真正体现出众多子网络正确的排序关
  • Metro UI CSS 学习笔记之组件(进度条、按钮组和评分)

    查阅Metro UI CSS 对组件 按钮组 评分和进度条 描述 本人觉得已经描述的很详细 所以在这里不打算做详细的讲解 大家可以直接阅读以下源代码 是进过本人已经优化后的代码 温馨提示 相关注释 也已经在代码中添加
  • 运行项目报错 proxy error: could not proxy request...

    今天跑项目的时候遇到一个问题 早上跑的时候还好好的 午休完起来一看 页面报错了 弹窗提示 proxy error could not proxy request from 我本地 to 目标地址 终端报错 Proxy error Could
  • 史上最简单易懂、全面详细的“正则化”教程

    进入正文 全文摘要 在机器学习和深度学习中 最艰难的问题就是如何面对模型的过拟合问题 处理过拟合的方式手段多样 我们常常听见的方法是 正则化 但是 很多的资料对于正则化的介绍要么是单调片面 要么是晦涩难懂 本文汲取众家之长 由浅入深 彻底搞
  • 〖Linux〗git push orgin master不能解析域名的解决方法

    错误信息 git push origin master ssh Could not resolve hostname bitbucket org Name or service not known fatal Could not read
  • 视频播放器vue-core-video-player

    视频播放器 目前在做一个项目 需要视频播放器 便找到个视频播放器 看着挺好用的 来实操一下 vue core video player 文档链接 https core player github io vue core video play
  • ConfigEngine使用示例

    ConfigEngine使用示例 前提 本系统基于公开的原则 采用了Python作为开发语言 因此你需要下载安装Python环境才能运行本系统 当然 你还需要下载一份最新的ConfEngine配置编译引擎 地址在这里 http code g