如何在c++中读取复杂的文本文件
How to read complex text file in c++?
要读取的文本文件具有特定模式:
Name line [tag name 452,54 | tag2 name 323,2 | tag3 name 252,25 ... ]
Name2 line [tag name 422,54 | tag2 name 33,2 | tag3 name 111,525 | tag4 name 222,2 ... ]
处理这个文件最麻烦的部分是没有设置每行标签的数量。
我试图通过逐行读取文件并使用scanf()
将行分解为变量来实现它,因为它擅长读取模式。但是tag name
的字数没有设置,所以它也没有多大帮助。
我可以在不丢失任何数据的情况下对文件模式进行一点操作,使其更易于读取,但我还没有想到任何解决方案。如何操作文件模式的示例:
Name line
tag name 452,54 | tag2 name 323,2 | tag3 name 252,25 ...
Name2 line
tag name 422,54 | tag2 name 33,2 | tag3 name 111,525 | tag4 name 222,2 ...
我添加了[]
和|
符号作为分隔符,但理想情况下它们越少越好。
Name line
tag name 452,54
tag2 name 323,2
tag3 name 252,25 ...
Name2 line
tag name 422,54
tag2 name 33,2
tag3 name 111,525
tag4 name 222,2 ...
如果你读过类似的模式,请分享。我现在有点困了。。。
EDIT:这是一个简单的.txt文件,我选择了tags name
和name line
来代替任何字符串值。没有身份证或其他东西可以让它变得容易。
您应该仔细研究定义文件格式的语法,并构建一个小型解析器,而不是在可以读取文件之前对文件进行破坏。虽然这项任务一开始可能看起来很艰巨,但并没有那么困难。
我更喜欢BoostSpirit来完成这样的任务。
看起来您正在搜索解析器。网上有很多。:)即使是lex/yacc或bison之类的东西也能帮上忙。
如果你真的必须编写自己的代码并维护换行符才能具有标记分离的特殊含义,你可以使用fgets()和strtok()的组合。http://www.cplusplus.com/reference/clibrary/cstring/strtok/
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 函数复杂度分析
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 使用 C++ 解析复杂的文本文件
- 如何在c++中读取复杂的文本文件