2

我有以下文本文件: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 可以让我将数据转换为大字符。我需要下一步的帮助,即如何将此字符转换为流或任何更好的解决方案。你有什么建议吗?

编辑:很多好的答案,对我来说,选择的一个优点是对代码的更改很小并且足够通用,我可以在代码的其他类似部分中使用它,其中解析了具有不同结构的几个输入文件。

4

5 回答 5

4

我猜您实际上并不想在代码中嵌入文本文件,因此 Blastfurnace 和 Kyle C 的答案为您的问题提供了更合理的解决方案。

但是,如果您确实确实想在代码中嵌入文本文件,然后将其作为流读入,那么最简单的方法就是这样。

首先,将文本文件嵌入为字符串:

static const char *gdat="16\n"
"0.0950125098376374401853193354250\n"
"0.281603550779258913230460501460\n"
"0.458016777657227386342419442983\n"
"0.617876244402643748446671764049\n"
"0.755404408355003033895101194847\n"
"0.865631202387831743880467897713\n"
"0.944575023073232576077988415535\n"
"0.989400934991649932596154173450\n"
"\n"
"0.189450610455068496285396723209\n"
"0.182603415044923588866763667977\n"
"0.169156519395002538189312079058\n"
"0.149595988816576732081501730116\n"
"0.124628971255533872052476277863\n"
"0.0951585116824927848099251053810\n"
"0.0622535239386478928628438391746\n"
"0.0271524594117540948517805723700\n";

然后,您可以使用 stringstream(gdat) 而不是使用 ifstream("g.dat"),并获得一个流,就您的目的而言,它实际上是相同的。

于 2012-05-24T01:33:19.613 回答
2

将其放入您初始化的双精度数组中。一般形式是

双倍 my_values[16] = { 1.234, 2.345, ... 等等 .. };

于 2012-05-23T23:51:29.447 回答
2
const double data[] = {
    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
};
于 2012-05-23T23:55:31.050 回答
2

使用(或编写)一些程序,可能是一个小程序awk或脚本,将您的文件转换为C文件。pythonocamlg.dat

修改您的构建过程(例如您的)以从原始文件Makefile中为生成的Cg.dat文件添加依赖项。

编译生成的C文件,并将其链接到您的二进制文件中。

于 2012-05-24T05:22:58.087 回答
0

这将定义和初始化与您当前代码类似的gt和数组。gc请注意,这些不是动态分配的,因此您完成后不需要delete[]它们。

double gt[] =
{
     0.0950125098376374401853193354250, 0.281603550779258913230460501460,
     0.458016777657227386342419442983,  0.617876244402643748446671764049,
     0.755404408355003033895101194847,  0.865631202387831743880467897713,
     0.944575023073232576077988415535,  0.989400934991649932596154173450,
    -0.989400934991649932596154173450, -0.944575023073232576077988415535,
    -0.865631202387831743880467897713, -0.755404408355003033895101194847,
    -0.617876244402643748446671764049, -0.458016777657227386342419442983,
    -0.281603550779258913230460501460, -0.0950125098376374401853193354250
};

double gc[] =
{
    0.189450610455068496285396723209,  0.182603415044923588866763667977,
    0.169156519395002538189312079058,  0.149595988816576732081501730116,
    0.124628971255533872052476277863,  0.0951585116824927848099251053810,
    0.0622535239386478928628438391746, 0.0271524594117540948517805723700,
    0.0271524594117540948517805723700, 0.0622535239386478928628438391746,
    0.0951585116824927848099251053810, 0.124628971255533872052476277863,
    0.149595988816576732081501730116,  0.169156519395002538189312079058,
    0.182603415044923588866763667977,  0.189450610455068496285396723209
};
于 2012-05-24T00:51:46.453 回答