如何在c++中读取复杂的文本文件

How to read complex text file in c++?

本文关键字:复杂 文本 文件 读取 c++      更新时间:2023-10-16

要读取的文本文件具有特定模式:

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 namename line来代替任何字符串值。没有身份证或其他东西可以让它变得容易。

您应该仔细研究定义文件格式的语法,并构建一个小型解析器,而不是在可以读取文件之前对文件进行破坏。虽然这项任务一开始可能看起来很艰巨,但并没有那么困难。

我更喜欢BoostSpirit来完成这样的任务。

看起来您正在搜索解析器。网上有很多。:)即使是lex/yacc或bison之类的东西也能帮上忙。

如果你真的必须编写自己的代码并维护换行符才能具有标记分离的特殊含义,你可以使用fgets()和strtok()的组合。http://www.cplusplus.com/reference/clibrary/cstring/strtok/