为何要自己写配置文件

1 解决引入很多库的问题
2 解决流程问题而非语言问题
3 学会简化问题

读写配置文件的知识

一下是一个txt配置文件,注意文件格式,如果我们在utf8 文件下读写,分为两种,一种是utf8 带BOM,一种不带,我们都要考虑

#id(int):address(varchar):width(int):height(int)
#418511899@qq.com author:钱波 qianbo 2021-02-28
//camera
//tcp or udp
1 rtsp://127.0.0.1/qianbo2.264 1280 720 live/1001
#2 rtsp://127.0.0.1/out.264 1280 720 live/1001
#2 rtsp://127.0.0.1/1.264 640 360 live/1002

ok,# 和//都是注释,如果加上这个符号,就必须要把这一行忽略
读出一行,标准的c++非常方便,一句话就出来,用java使用readLine函数
std::getline(infile, temp);
注意在linux下和windows下是不一样的,linux下读出来的会有一个’\r’,所以要去除

static void trim(std::string &s)
{if (s.empty())return;s.erase(s.find_last_not_of('\r') + 1); //the linux system getline must remove the '\r's.erase(s.find_last_not_of(' ') + 1);//s.erase(s.find_last_not_of('\t') + 1);s.erase(0, s.find_first_not_of(' '));//s.erase(0, s.find_first_not_of('\t'));
}

这是语言无关的,如果是是用c,c++,问题都是一样,需要了解系统和知识。接下来这个问题是也会经常碰到的,就是带BOM头部的utf8文件,要做产品,就必须把各种情况测试到,并且解决掉这个问题。

if (temp.length() > 3 /*0xEF 0xBB 0xBF*/)
{uint8_t *pos = (uint8_t*)temp.c_str();if (*pos == 0xEF){temp = temp.substr(3);//去除前三字节printf("%02x %02x %02x \n", *(pos), *(pos + 1), *(pos + 2));cout << "utf8 and BOM" << endl;}
}

使用java读写文件,并跳过注释,会少一些问题

public void readFile(String filename ) throws IOException {FileInputStream fis=new FileInputStream(filename);InputStreamReader isr=new InputStreamReader(fis, "UTF-8");BufferedReader br = new BufferedReader(isr);String line="";String[] arrs=null;while ((line=br.readLine())!=null) {String str = line.trim()//去除前后空格if(str[0] == '#' || (str[0]=='/' && str[1] == '/')continue;arrs=line.split(" ");//准备一个结构放入,parseInt这里自己准备异常抛出int id = Integer.parseInt(arrs[0]);String address = arrs[1];int width = Integer.parseInt(arrs[2]);int height = Integer.parseInt(arrs[3]); String live = arrs[4];System.out.println(id + " " + address + " " + width + " "+height + " " +live);}br.close();isr.close();fis.close();
}

nodejs读写文件也是非常方便的,不用那么复杂,split 等函数和java等等都一致,总的来讲,还是软件工程的问题。

var fs = require('fs')fs.readFile('in.txt', function (error, data) {if (error) {console.log('error occur')} else {var str = data.toString();var test = str.split("\r\n");console.log(test.length);for (let i = 0; i < test.length; i++) {let x = test[i];if (x[0] == '#' || (x[0] == '/' && x[1] == '/')) {console.log("not use");}else{//这里在继续split console.log(x);}}}
})

nodejs打印出的结果,不使用则打印not use,使用则打印该行,结果:

几种语言流程等都一样,但是c++需要的是去除\r(linux下),也需要去除BOM头部,如果是有BOM头部的文件。因为c++与c稍底层,没有像java node 等封装那么多,但同时也提供了很强的灵活性和运行效率。

总结:简化问题

ok,如果判别是注释的,首先我们简化问题,我们的注释只出现在首字节,就好办了,我们确实要学会简化问题,否则一个读写文件就是一个很大的问题,花费很长的时间是不值得的,因为是我们自己在用,做法就是
1 去除前后空格
2 判断第一个字符为‘#’ 或者第一第二个字符都为‘/’
3 条件满足,跳过这一行,不做解析
4 split 分割我们的配置,注意异常处理 放入结构体

自由读写配置文件的艺术[java c++ node](二)相关推荐

  1. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写

    [Java教程]node.js 利用流实现读写同步,边读边写 0 2017-09-10 13:00:14 //10个数 10个字节,每次读4b,写1blet fs=require("fs&q ...

  2. 一个用于读写配置文件的类

    一个用于读写配置文件的类 该类适应读写如下格式的.xml,.config文档 <?xml version="1.0" encoding="utf-8" s ...

  3. Java与Node.js性能PK

    原文链接:www.tandemseven.com/b... 如果你打开浏览器,搜索"Java与Node.js哪个更快",你会发现大部分答案声称Node.js更快,也有一些人持相反意 ...

  4. .Net2.0 使用ConfigurationManager读写配置文件

    .net1.1中如果需要灵活的操作和读写配置文件并不是十分方便,一般都会在项目中封装一个配置文件管理类来进行读写操作.而在.net2.0中使用ConfigurationManager 和WebConf ...

  5. python学习笔记之编写readConfig读写配置文件

    python学习笔记之编写readConfig读写配置文件_weixin_34055910的博客-CSDN博客

  6. 如何在MFC中读写配置文件

    如何在MFC中读写配置文件 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI ...

  7. python-ConfigParser模块【读写配置文件】

    对python 读写配置文件的具体方案的介绍 1,函数介绍 import configParser 如果Configparser无效将导入的configParser 的C小写 1.1.读取配置文件 - ...

  8. python写配置文件方法_Python读写配置文件的方法

    本文实例讲述了Python读写配置文件的方法.分享给大家供大家参考.具体分析如下: python 读写配置文件ConfigParser模块是python自带的读取配置文件的模块.通过他可以方便的读取配 ...

  9. python:实例化configparser模块读写配置文件

    之前的博客介绍过利用python的configparser模块读写配置文件的基础用法,这篇博客,介绍下如何实例化,方便作为公共类调用. 实例化的好处有很多,既方便调用,又降低了脚本的维护成本,而且提高 ...

最新文章

  1. 为什么说可视化编程是糟糕的想法?
  2. 基于三维卷积神经网络的RGB-D显著目标检测
  3. 产品经理规划产品之需求梳理
  4. Python中numpy中tile和repeat用法和区别
  5. 常量指针与指针常量的区别(转帖)
  6. 如何使用网上下载的arcgis工具箱,报错汇总
  7. linux 向程序发送信号,Linux下的信号处理
  8. LeetCode 1905. 统计子岛屿(BFS)
  9. 语言运算顺序题目_我的Python学习笔记:今天我学了关于Python里的运算符及运算顺序...
  10. android java框架_【阿里P8大牛教你Android入门之路(java篇)】——Java集合框架(系列篇1)...
  11. k8s springboot 文件_Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程...
  12. 表按某个字段,新增一个序号列
  13. java多线程-生产者消费者模式
  14. 酷狗.kgtemp文件加密算法逆向
  15. 基于FPGA三大串行通信接口简单概述
  16. excel快速选择数据的4种方法
  17. ArcGIS提取面数据中心线
  18. DDD战略建模在重构业务系统时的实践
  19. 两种方法实现卸载apk应用程序
  20. 【尚硅谷 Java Web 笔记】表格的跨行跨列

热门文章

  1. iphone型号表_iphone网络制格式怎么看,如何看两网三网、美版、欧版和国行信号到底有么有区别...
  2. 一位湖北大学的学生作品,看后久久不能平静
  3. header()函数使用说明
  4. 罗永浩从交个朋友拿走“天价”分手费?将进军AR行业:创业三部曲之三即将开拍...
  5. 一加、OPPO官宣合并,“父子团圆”能否拯救一加?
  6. 难了!华为转身开始大卖4G手机
  7. 百度入股电商直播服务商“卡美啦” 备战2020年双11
  8. 迅雷前CEO陈磊涉嫌职务侵占罪已被立案侦查,股价周四下跌超7%
  9. 又收获一位副总裁?传暴风TV CEO刘耀平已加盟小米电视
  10. 有钱就是任性!阿里20亿美元拿下网易考拉:欢迎加入阿里动物园