首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一种C+实现格式化文本解析的方法

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

摘要

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

关键词

C++ 文本解析

背景:

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

解决思路:

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

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

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

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

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

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

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

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

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

3.函数解析的结果

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206B0VEAR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券