点击上方“中兴开发者社区”,关注我们
每天读一篇一线开发者原创好文
摘要
本文主要介绍使用C++语言实现有固定格式的文本文件的一种解析方法,和解析函数的主要实现逻辑。
关键词
C++ 文本解析
背景:
参加“5G LTE挑战杯”活动时,初赛题目要求将plantUML文本按照要求输出指定的格式,我们组采用C++语言进行开发,C++语言基础库处理字符串的函数比较少,无法满足直接解析的需求,因此我们基于strtok以及strtok_s方法实现了格式化文本的解析。
解决思路:
需要解析的文本内容如下图所示。经过对题目以及文本内容进行分析,基本可以将内容分成2大部分,第一部分为文本的头和尾;第二部分为正式内容(契约主体)。而正式内容可根据规律以及其表示的语意每两行分割成一条数据,我们称每条数据的第一行为主消息,第二行为注释。
1.正文内容消息结构定义
主要定义了如下结构体,可以完整表示正文每条消息加注释的信息。
2.按照关键字识别文本的头和尾特殊处理
通过头和尾的关键字识别出头或者尾的行,解析函数直接返回,由上层调用解析下一行。
头和尾处理的关键代码如下(常量声明、变量声明、异常处理、入参检查等过程已忽略):
2.按照语意将正文内容解析组织
识别每一行的第一个单词,根据是否为note区分本行的内容为消息还是注释,分别调用函数ParseNoteContent或ParseMainContent进行处理。
在子函数中,使用空格、冒号、逗号将一整行的内容分割成段,再按照每一段在行中的位置将其填入定义的结构体中相应的参数中。
3.函数解析的结果
解析后由上层将每两行解析的结果加入到map中存储,我们对plantUML文件中的每一个细节进行了解析和表达,在系统后续的处理中可以根据需求任意的获取需要的数据。如下图展示的是前两行正文内容解析的结果: