gpt4 book ai didi

c++ - boost::format - 尝试使用 HTML 作为格式化程序字符串 - 需要一些帮助

转载 作者:行者123 更新时间:2023-11-27 23:34:38 24 4
gpt4 key购买 nike

我正在尝试使用 boost::format,其中我的格式字符串是下面的 HTML。我打算在 %s 占位符指定的位置插入 3x std::strings。

换句话说——我正在打开下面的 *.html 文件进行阅读,将其内容读入单个 std::string 并将其用作格式化程序。接下来我尝试执行以下操作:

std::string output = (boost::format(formatter) % str1 % str2 % str3).str();

其中 str1-3 是包含我试图插入的文本的字符串 - 显然。格式尝试抛出异常,指出格式字符串格式错误。在过去 2 小时的大部分时间里,我一直在尝试分析它,但我失败了,我需要一些帮助。

下面的 HTML 有什么问题 - 为什么它不能成为正确的格式化字符串?我应该注意哪些限制?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>KP&D</title>
<style type="text/css">
html, body
{
height: 100%;
margin: 0;
padding: 0;
}
img#bg
{
position:fixed;
top:0;
left:0;
width:100%;
height:100%;
}
#content
{
position:relative;
z-index:1;
}
</style>
</head>
<body>
<img src="Images/PageBackground.png" alt="background image" id="bg" />
<div id="content">
<br/>&nbsp;
<img src="Images/MyLogoReflected.png" alt="logo image"/>
<br />&nbsp;
<img src="Images/PDC_StatusPage.png" alt="remote status page image" />
<br />&nbsp;
<img src="Images/PDC_RemoteConfiguration.png" alt="remote config image" />
<br />&nbsp;
%s
<br />&nbsp;
<img src="Images/PDC_RemoteSubsystemStatus.png" alt="remote status image" />
<br />&nbsp;
%s
<br />&nbsp;
<img src="Images/PDC_RemoteConnectivityStatus.png" alt="remote status image" />
<br />&nbsp;
%s
<br />&nbsp;
</div>
</body>
</html>

这是负责加载上述文件的代码片段:

#include <string>
#include <fstream>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>

int main()
{
std::ifstream ifs("welcome.html"); // the html is in that file

if(!ifs.good())
return 1;

std::string buffer = "";

while(!ifs.eof())
{
char buf[256];
ifs.getline(buf, 256);
buffer += buf;
}

buffer = boost::trim_right_copy(buffer);

const std::string str1 = "aaa";
const std::string str2 = "bbb";
const std::string str3 = "ccc";
std::string Out = "";

try{
Out = (boost::format(buffer)
% str1
% str2
% str3
).str();
} catch(std::exception &e)
{
err = e.what();
return 1;
}

return 0;
}

最佳答案

boost::format 使用% 分隔format specifications ;所以你的 CSS 中的 % 字符会混淆它;它正试图将它们评估为格式规范。您需要将它们替换为 %% 以在输出中仅获得文字 % 字符。

如果这没有帮助,那么我建议尝试将您的模板编辑成更小的部分,直到您找到能够证明问题的尽可能小的部分。一旦你这样做了,你可能会自己发现问题,但如果没有,请编辑你的帖子以包含仍然能说明问题的较小片段(最好是 1 或 2 行,每行少于 80 个字符),以及确切的错误你是从 Boost 得到的。同样,如果您发布了一段用于读取文件并调用 boost::format 的代码,将会有所帮助;一个完整的程序只有几行代码,用于读取模板并打印 boost::format 的输出,这样我们就可以查看您的代码中是否有任何可能导致问题的地方(再一次,这可能会帮助您自己隔离问题)。

您发布的代码(经过一些编辑,因此它确实有效;您省略了 buffererr 的声明),与您发布的模板一起工作得很好,如果CSS 中的所有 % 符号都被替换为 %%,正如我最初建议的那样。这是经过编辑的代码(包括用于检查其是否有效的输出):

#include <string>
#include <fstream>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <iostream>

int main()
{
std::ifstream ifs("template.html"); // the html is in that file
std::string buffer, err;

if(!ifs.good())
return 1;

while(!ifs.eof())
{
char buf[256];
ifs.getline(buf, 256);
buffer += buf;
}

buffer = boost::trim_right_copy(buffer);

const std::string str1 = "aaa";
const std::string str2 = "bbb";
const std::string str3 = "ccc";
std::string Out = "";

try{
Out = (boost::format(buffer)
% str1
% str2
% str3
).str();
} catch(std::exception &e)
{
err = e.what();
std::cout << err << std::endl;
return 1;
}

std::cout << Out;

return 0;
}

这是编辑后的模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>KP&D</title>
<style type="text/css">
html, body
{
height: 100%%;
margin: 0;
padding: 0;
}
img#bg
{
position:fixed;
top:0;
left:0;
width:100%%;
height:100%%;
}
#content
{
position:relative;
z-index:1;
}
</style>
</head>
<body>
<img src="Images/PageBackground.png" alt="background image" id="bg" />
<div id="content">
<br/>&nbsp;
<img src="Images/MyLogoReflected.png" alt="logo image"/>
<br />&nbsp;
<img src="Images/PDC_StatusPage.png" alt="remote status page image" />
<br />&nbsp;
<img src="Images/PDC_RemoteConfiguration.png" alt="remote config image" />
<br />&nbsp;
%s
<br />&nbsp;
<img src="Images/PDC_RemoteSubsystemStatus.png" alt="remote status image" />
<br />&nbsp;
%s
<br />&nbsp;
<img src="Images/PDC_RemoteConnectivityStatus.png" alt="remote status image" />
<br />&nbsp;
%s
<br />&nbsp;
</div>
</body>
</html>

关于c++ - boost::format - 尝试使用 HTML 作为格式化程序字符串 - 需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com