用C ++读取文本文件的特定部分(在两个分隔符之间)

时间:2015-07-07 10:14:08

标签: c++ file-io

我有一个以下格式的文本文件:

UserIP-Address-1 UserInfo-1 UserInfo-2 UserInfo-3 UserIP-Address-1_ENDS UserIP-Address-2 UserInfo-1 UserInfo-2 UserInfo-3 UserIP-Address-2-ENDS

我需要根据客户端请求收集信息,并在这两个UserIP-Address-1UserIP-Address-1_ENDS分隔符之间发送数据。我可以使用findvector::iterator找到其中一个分隔符,但是如何在两者之间找到另一个结尾和数据?请指导我,谢谢大家。

1 个答案:

答案 0 :(得分:1)

首先,您应该定义(至少在纸上或评论中)精确地您的文件的格式,可能通过一些EBNF表示法。一个例子永远不够(当然,除了格式文档之外,还有一些真实的具体例子,而不是抽象的例子)。如果该文件是由其他软件生成的,则该软件应记录该格式。

您需要逐行阅读文件(例如使用std::getline),并且可能完全(或者至少在您获得所有想要的信息之前)。您可以使用标准lexingparsing技术(可能在每一行,也许在整个文件中)。你可以(至少如果文件不是很大)在内存中填充一些数据。

如果文件非常大(例如,不适合RAM的千兆字节),则可以读取两次。第一次,计算相关线(或数据块​​)的偏移量(使用tellg),例如进入某些std::map,第二次适当地使用seekg来阅读该文件的部分内容。

如果您可以更改文件的格式,可以考虑使用标准的文本序列化格式,如JSON(有几个C ++库处理它,例如JSONCPP)或YAML(我不建议使用XML,除非它是外部要求,因为XML过于复杂且过于冗长。您可能还会考虑一些数据库方法,可能就像Sqlite一样简单。