【发布时间】:2012-05-30 13:28:06
【问题描述】:
我有以下文本文件: g.dat
16
0.0950125098376374401853193354250
0.281603550779258913230460501460
0.458016777657227386342419442983
0.617876244402643748446671764049
0.755404408355003033895101194847
0.865631202387831743880467897713
0.944575023073232576077988415535
0.989400934991649932596154173450
0.189450610455068496285396723209
0.182603415044923588866763667977
0.169156519395002538189312079058
0.149595988816576732081501730116
0.124628971255533872052476277863
0.0951585116824927848099251053810
0.0622535239386478928628438391746
0.0271524594117540948517805723700
还有下面的 C++ 代码来准备它:
ifstream In;
In.open(("g.dat").c_str());
In>>gaussdim;
gt = new double[gaussdim];
gc = new double[gaussdim];
for(int i=0;i<gaussdim/2;i++)
{
In>>gt[i];
gt[gaussdim-i-1]=-gt[i];
}
for(int i=0;i<gaussdim/2;i++)
{
In>>gc[i];
gc[gaussdim-i-1]=gc[i];
}
In.close();
我想将此数据文件嵌入到我的程序中,以便我可以轻松地重新分发它,而不必总是依赖于处理许多不同的文件。我的目标是 linux 和 mac,所以 xxd 可以让我将数据转换为大字符。我需要下一步的帮助,即如何将此字符转换为流或任何更好的解决方案。你有什么建议吗?
编辑:很多好的答案,选择的答案对我来说具有以下优势,即对代码的更改很小并且足够通用,我可以在代码的其他类似部分使用它,其中有几个具有不同结构的输入文件被解析。
【问题讨论】:
-
对不起,如果我没有得到您的问题,但据我了解,您需要在应用程序的整个生命周期中访问这些数据,而无需读取数据文件。对吗?在这种情况下,你正在做的很好。您一次读取数据并无休止地使用它。或者你可以按照下面的答案建议的方式去。
-
实际上我想摆脱数据文件,以某种方式将其作为文本插入代码中,然后更改代码以使'gc'和'gt'最终保持与中相同的值原代码
-
但是我没有得到'然后更改代码',是不是你的代码正在覆盖它自己的行为,也就是说它在运行时吐出代码,它正在替换原始二进制文件。您可能已经猜到了,我现在对您的需要感到困惑。如果您的意思比这更简单,请道歉,但请解释一下..