在 C++ 代码中嵌入文本文件
Embedding text file in c++ code
我有以下文本文件:克.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 是我将数据转换为大字符的可能性。我需要下一步的帮助,即如何将此字符转换为流或任何更好的解决方案。你有什么建议?
编辑:很多好的答案,选择的答案对我来说有一个优势,即对代码的更改很小,并且足够通用,我可以在代码的其他类似部分中使用它,其中解析了几个具有不同结构的输入文件。
我猜你实际上并不想在你的代码中嵌入文本文件,所以Heart和Kyle C的答案可以更合理地解决你的问题。
但是,如果您确实想在代码中嵌入文本文件,然后将其作为流读取,最简单的方法是这样的。
首先,将文本文件嵌入为字符串:
static const char *gdat="16n"
"0.0950125098376374401853193354250n"
"0.281603550779258913230460501460n"
"0.458016777657227386342419442983n"
"0.617876244402643748446671764049n"
"0.755404408355003033895101194847n"
"0.865631202387831743880467897713n"
"0.944575023073232576077988415535n"
"0.989400934991649932596154173450n"
"n"
"0.189450610455068496285396723209n"
"0.182603415044923588866763667977n"
"0.169156519395002538189312079058n"
"0.149595988816576732081501730116n"
"0.124628971255533872052476277863n"
"0.0951585116824927848099251053810n"
"0.0622535239386478928628438391746n"
"0.0271524594117540948517805723700n";
然后,您可以使用stringstream(gdat),而不是使用ifstream("g.dat"),并获得一个实际上相同的流。
把它放到你初始化的双精度数组中。一般形式是
双my_values[16] = { 1.234, 2.345, ...等。。 };
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
};
使用(或编写)一些程序,可能是一个小awk
或python
或ocaml
脚本,将g.dat
文件转换为 C 文件。
修改您的构建过程(例如您的Makefile
),以从原始g.dat
文件为生成的 C 文件添加依赖项。
编译生成的 C 文件,并将其链接到二进制文件中。
这将
定义和初始化类似于当前代码的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
};
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入