Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >要解析一个配置文件,当打开文件的时候我崩溃了

要解析一个配置文件,当打开文件的时候我崩溃了

作者头像
麒思妙想
发布于 2020-07-23 07:26:06
发布于 2020-07-23 07:26:06
4330
举报
文章被收录于专栏:麒思妙想麒思妙想

薛定谔的猫

首先,说一些题外话,按照我一贯的风格,这篇文章本应该叫《浅谈如何优雅读取特殊格式配置文件》,但是最近被某些网站的推送恶心到了,我是不太喜欢这种标题的,所以我一直尽量避免使用这种标题党式的标题,但是,好奇心驱使我,想做一次实验,欢迎大家留言,说出你的想法,你更喜欢哪个标题?

A. 要解析一个配置文件,当打开文件的时候我崩溃了 | 为人性癖耽佳句,语不惊人死不休

B. 浅谈如何优雅读取特殊格式配置文件 | 少一点套路,多一点真诚

C. 冇所谓

一点点创意

最近需要读取一些配置文件,但他并不是常用格式,而且需要我们对该文件进行操作除了正常的读写外,还要尽量保存原文件的注释、顺序等信息。

这个配置文件原本也是键值对性质的文件,但是这里键值的分隔符,用了空格和制表符而不是等号。

键也不是唯一的,同名键可能有多个值的情况。

如何满足这个需求呢?将文件加载进来,处理成一个特殊的数据结构,标记出来注释,字段,值等信息,直接对这个结构进行操作,然后再落盘回去,即形成如下图结构。

如上所示,尽管也可以完成需求,但是总觉得不够优雅,逻辑结构混杂在一起。

那么如何能更优雅一些呢?作为一名老CRUD,我是这么想的,在原始数据加载时候,引入一个纯数据缓存队列,用于应对读取操作,引入一个辅助元数据队列, 用于协助判断键具体的类型,例如,键值对、键多值对等情况。

在进行数据更新的时候,引入变更队列,用于处理数据变更,这里并不会直接更新实际数据,而是在落盘的时候,才会合并处理。在外层加入一个布隆过滤器,用于在遍历的时候,先抵消部分无变更键。

这样,还能顺便实现一波恢复操作。

整体架构,归结如上图所示。架构设计,有时就是这样,一点点的变更,看着能笑出来。

希望能对正在读文章的你有所启发,也欢迎与我交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麒思妙想 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
要解析一个配置文件,当打开文件的时候我崩溃了
首先,说一些题外话,按照我一贯的风格,这篇文章本应该叫《浅谈如何优雅读取特殊格式配置文件》,但是最近被某些网站的推送恶心到了,我是不太喜欢这种标题的,所以我一直尽量避免使用这种标题党式的标题,但是,好奇心驱使我,想做一次实验,欢迎大家留言,说出你的想法,你更喜欢哪个标题?
麒思妙想
2020/07/20
4350
【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 写出或更新配置文件 | 读取配置文件 )
文章目录 一、写出或更新配置文件 二、读取配置文件 一、写出或更新配置文件 ---- 写出或更新配置文件 : 首先 , 使用 字符数组 存储 键值对 信息 ; // 写出 或 更新 的配置项 // 数组声明会后 , 注意先进行初始化为 0 操作 , 否则其中的数据可能是随机的 char key[256] = {0}; // Key 键 char value[256] = {0}; // Value 值 然后 , 通过 scanf 获取 键值对 信息 ;
韩曙亮
2023/03/30
6310
redis全配置文件解析
🔍 本文将深入解析Redis的全配置文件,详细介绍核心配置项、日志相关配置、持久化配置(RDB和AOF)、主从同步相关配置以及慢查询相关配置,为读者提供全面的Redis配置信息。
默 语
2024/11/20
1960
Python常用配置文件ini、json、yaml读写总结
ini 即 Initialize ,是Windows中常用的配置文件格式,结构比较简单,主要由节(Section)、键(key)和值(value)组成。每个独立部分称之为section,每个section内,都是key(option)=value形成的键值对。
吾非同
2020/12/17
2.3K0
程序常用配置文件格式介绍
不管是移动应用、桌面程序还是后台服务,经常需要从配置文件中读取配置信息,进行程序初始化和改变运行时的状态。以什么要的格式来存储配置信息,这是开发人员需要面临的一个问题。常用的配置文件格式主要有:
恋喵大鲤鱼
2022/05/09
3.2K0
程序常用配置文件格式介绍
浅谈配置文件格式
计算机上有数以千计的配置文件。你可能永远不会直接与其中的大部分文件打交道,但它们确实散落在你的 /etc 以及 ~/.config、~/.local、/usr 文件夹中。还有一些可能在 /var,甚至 /opt 文件夹中。如果无意中打开过或更改过它们,你就可能会有疑问:为什么有些配置文件看起来是某一种格式,而另一些则是看起来完全不同的格式?
用户8639654
2021/10/11
7310
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )
该函数的作用是 写出或更新配置项 , 遍历每行数据 , 检查 key 键 是否存在 ,
韩曙亮
2023/03/30
1.5K0
TOML语言配置文件入门
最近在配置算子的时候,一直用着一种配置文件,而且有着自己奇奇怪怪的语法,起初没想多以为是公司自己独创的语言。后来经提醒发现是TOML语言,由于没怎么做过开发,之前从来没听说过这个语言,趁此机会了解学习一下。
Mirza Zhao
2023/10/26
1.9K2
配置文件格式 INI 快速上手
INI 的全称是 Initialization,即为初始化文件,最早是 Windows 系统配置文件所采用的格式。
恋喵大鲤鱼
2024/07/22
4200
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy 脚本 ;
韩曙亮
2023/03/30
9530
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
配置文件格式 TOML 快速上手
GitHub 联合创始人 Tom Preston-Werner 觉得 YAML 不够简洁优雅,如缩进要严格对齐,因此和其他几位开发者一起捣鼓了一个 TOML(Tom’s Obvious Minimal Language)。
恋喵大鲤鱼
2024/04/20
1.1K0
python读取配置文件&&简单封装
之前有做过把爬虫数据写到数据库中的练习,这次想把数据库信息抽离到一个ini配置文件中,这样做的好处在于可以在配置文件中添加多个数据库,方便切换(另外配置文件也可以添加诸如邮箱、url等信息)
冰霜
2022/03/15
6850
python读取配置文件&&简单封装
Spring Boot 配置文件怎么造?
自从用了Spring Boot,个人最喜欢的就是Spring Boot的配置文件了,和Spring比起,Spring Boot更加灵活,修改的某些配置也是更加得心应手。
爱撒谎的男孩
2023/08/25
2110
细数Java项目中用过的配置文件(ini 篇)
Java 菜鸟,会把可变的配置信息写死在代码里;Java 老鸟,会把可变的配置信息提取到配置文件中。坊间流传这么一句非科学的衡量标准,来评判程序员的级别。
一猿小讲
2020/04/07
9610
细数Java项目中用过的配置文件(ini 篇)
Python接口自动化之yaml配置文件
在上一篇Python接口自动化测试系列文章:Python接口自动化之数据驱动,主要介绍openpyxl操作excel,结合ddt实现数据驱动。
可可的测试小栈
2020/05/07
5.5K0
Redis之解析配置文件
和我们的Struts2配置文件类似,可以通过includes包含,redis.conf可以作为总闸,包含其他
yuanshuai
2022/08/22
3870
Redis之解析配置文件
【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
文章目录 一、头文件 cfg.h 二、核心业务 cfg.c 三、主函数 四、执行结果 一、头文件 cfg.h ---- // 防止多次导入 #ifndef __CFG_H__ #define __CFG_H__ // 兼容 C++ #ifdef __cplusplus extern "C" { #endif // __cplusplus // 定义接口时 , 如果函数形参用作输入数据时 , 可以在形参名很后面添加 /*in*/ 注释 // // 获取配置项 int read_config_file(
韩曙亮
2023/03/30
9350
【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★
细数Java项目中用过的配置文件(properties篇)
项目研发过程中,总会遇到一些经常改变的参数,比如要连接的数据库的连接地址、名称、用户名、密码;再比如访问三方服务的 URL 等等。考虑到程序的通用性,这些参数往往不能直接写死在程序里,通常借助配置文件来优雅处理。
一猿小讲
2020/04/21
1.3K0
细数Java项目中用过的配置文件(properties篇)
用 Groovy 解析 JSON 配置文件
应用程序通常包括某种类型的默认或“开箱即用”的状态或配置,以及某种让用户根据自己的需要定制配置的方式。
用户1880875
2021/09/07
4.3K0
Python 读取配置文件常用几种方式
  我们在设计自动化测试框架的时候,经常使用到配置文件,而配置文件种类有很多,常见的配置文件格式有很多中:ini、yaml、xml、properties、txt、py等。
全栈测试开发日记
2023/02/02
1.9K0
Python 读取配置文件常用几种方式
推荐阅读
相关推荐
要解析一个配置文件,当打开文件的时候我崩溃了
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文