如何分离和保护文本块并在之后打开它们? C++

Posted

技术标签:

【中文标题】如何分离和保护文本块并在之后打开它们? C++【英文标题】:How to separate and safe textblocks and open them afterwards? C++ 【发布时间】:2019-05-10 20:17:07 【问题描述】:

我想保护一个与下一个分隔的文本块(包括新行和每种类型的字符)。所有这些都必须保存在一个文件中,然后我想打开它们(以进行进一步处理)。我怎样才能将它们分开保存?

一个例子: 一个简单的解决方案是,如果我在每个文本块之后写一个逗号。但是如果文本块中也有逗号,我无法正确打开它们。

我正在寻找放置在这些文本块之间的标志,以便我可以分隔这些文本块。但是,它必须是一个不能作为字符有效的标志。

感谢大家的帮助 - 周末愉快 :)

【问题讨论】:

如果不是逗号分隔,什么是“文本块”?数据从何而来? – 但是,它必须是一个无效的字符。 – 如果不在std::strings 中,这些“文本块”如何存储? 它是一个 std::string... 它只是一个用户输入,就像个人日记一样。我知道,我可以使用 '\0' 但我不太喜欢那样。也许这些文本块之间会有一些数字(也存储以供以后使用)并且像逗号之类的东西会更好。嗯...也许我可以在搜索字符串时停用逗号搜索。还有其他选择吗? 那么用户决定“文本块”何时结束? 完全正确。这个文本块可以是任何东西。 所以它必须是用户可以输入的东西。那么它不可能是:它必须是一个无效的字符。 【参考方案1】:

您可能正在寻找escape characters。

此示例用于基本说明。您可以选择 json、xml 或其他标准。它们还将具有合适的转义功能,这些功能大多以相同的方式工作。

在您的示例中,此转义字符必须是逗号。

转义

保存文本块时,将所有逗号“,”替换为字符串“\c”。

然后您可以使用“,”来分隔文本块,因为文本块中的所有逗号现在都是“\c”。 请注意,您还需要先转义转义字符。 ("\" -> "\")

拆分

当您尝试在文本之间找到分隔符时,您会搜索逗号。

不转义

当您回读文本块并找到正确的开头和结尾时,再次将“\”替换为“\”,将“\c”替换为“,”。

【讨论】:

谢谢@stena - 这是我的问题 欢迎您@ratloser。如果您可以使用我的答案,请投票和/或接受它。 :) 我做到了 :) 感谢您的反馈!声望低于 15 人的投票将被记录,但不会更改公开显示的帖子得分。 @ratloser 谢谢。你也可以accept吗?【参考方案2】:

您可以像这样使用 json:

 
    "Text_1": "string",
    "Text_2": "string",
    "Text_3": "string",

我也推荐你这个图书馆

https://github.com/nlohmann/json

最好的问候!

【讨论】:

感谢您的帮助,但我认为这有点尴尬。我需要每次将“Text_1”:“string”写入文件 - >更大的文件。当用户输入包含一个我用来分隔字符串的标记时,主要问题就出现了......就像在你的例子中,逗号、冒号或类似的东西。但无论如何,我会看看这个库,谢谢:) 不客气!这是编写或访问您需要的文本块的好方法,例如 write: json j; // 添加一个字符串,存储为 std::string j["name"] = "hjshdjkadhasjkdhaskjdad";并阅读: std::ifstream i("file.json"); json j;我 >> j; auto text_ = j["text_1"].get<:string>();

以上是关于如何分离和保护文本块并在之后打开它们? C++的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分文本文件并在一行中存储 2 个值?

如何替换离子页脚元素的文本内容?

C++ 以二进制形式读取文本文件并在控制台中显示

在文本框中,保护第一个单词,但允许添加/编辑这些单词之后的文本

C++ 从文本文件检查操作系统

如何从 C++ 的文本字段中读取文本