博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
干货|一种C++实现格式化文本解析的方法
阅读量:3561 次
发布时间:2019-05-20

本文共 774 字,大约阅读时间需要 2 分钟。

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文

摘要

本文主要介绍使用C++语言实现有固定格式的文本文件的一种解析方法,和解析函数的主要实现逻辑。

关键词

C++ 文本解析  

背景:

参加“5G LTE挑战杯”活动时,初赛题目要求将plantUML文本按照要求输出指定的格式,我们组采用C++语言进行开发,C++语言基础库处理字符串的函数比较少,无法满足直接解析的需求,因此我们基于strtok以及strtok_s方法实现了格式化文本的解析。

解决思路:

需要解析的文本内容如下图所示。经过对题目以及文本内容进行分析,基本可以将内容分成2大部分,第一部分为文本的头和尾;第二部分为正式内容(契约主体)。而正式内容可根据规律以及其表示的语意每两行分割成一条数据,我们称每条数据的第一行为主消息,第二行为注释。

1.正文内容消息结构定义

主要定义了如下结构体,可以完整表示正文每条消息加注释的信息。

2.按照关键字识别文本的头和尾特殊处理

通过头和尾的关键字识别出头或者尾的行,解析函数直接返回,由上层调用解析下一行。

头和尾处理的关键代码如下(常量声明、变量声明、异常处理、入参检查等过程已忽略):

2.按照语意将正文内容解析组织

识别每一行的第一个单词,根据是否为note区分本行的内容为消息还是注释,分别调用函数ParseNoteContent或ParseMainContent进行处理。

在子函数中,使用空格、冒号、逗号将一整行的内容分割成段,再按照每一段在行中的位置将其填入定义的结构体中相应的参数中。

3.函数解析的结果

解析后由上层将每两行解析的结果加入到map中存储,我们对plantUML文件中的每一个细节进行了解析和表达,在系统后续的处理中可以根据需求任意的获取需要的数据。如下图展示的是前两行正文内容解析的结果:

转载地址:http://icirj.baihongyu.com/

你可能感兴趣的文章
学习日记04
查看>>
学习日记08(元组、字典、集合)
查看>>
js自定义数据顺序进行升序或者降序排序
查看>>
【零】简单数仓框架优化、配置及基准测试
查看>>
【零】Linux中MySQL安装
查看>>
Sqoop的安装及测试
查看>>
Kylin的简单使用
查看>>
Presto的概念和安装使用
查看>>
Druid的Web页面使用
查看>>
Scala-HelloWorld
查看>>
Scala-IDEA中环境部署
查看>>
Scala-HelloWorld解析
查看>>
Scala-变量和数据类型
查看>>
Scala-流程控制
查看>>
Scala-面向对象后章
查看>>
iOS蓝牙原生封装,助力智能硬件开发
查看>>
iOS 代码的Taste(品位)
查看>>
iOS开发代码规范
查看>>
iOS组件化实践(基于CocoaPods)
查看>>
【iOS学习】RxSwift从零入手 - 介绍
查看>>