如何将数据存储在二维向量中?
Posted
技术标签:
【中文标题】如何将数据存储在二维向量中?【英文标题】:How can i store data in a 2d vector? 【发布时间】:2021-09-16 11:37:42 【问题描述】:我有一段代码,我在其中读取一个 CSV 文件并打印它的内容。现在的问题是我想在 ESP32 上运行我的代码,并且由于 micropython 的一些限制,我无法将我的文件上传到 spiffs 存储中。那么有什么方法可以将 csv 文件内容存储在代码本身中,而不是从外部读取呢?
我的代码:
vector<vector<double> > read_csv(const char *filename)
ifstream read_file(filename);
vector<vector<double> > csv_data;
std::string lineStr;
while (getline(read_file, lineStr))
stringstream ss(lineStr);
std::string d;
vector<double> a_line_data;
while (getline(ss, d, ','))
a_line_data.push_back(atof(d.c_str()));
csv_data.push_back(a_line_data);
//cout << csv_data << endl;
return csv_data;
这就是我打印内容的方式:
vector<vector<double> > csv_data = read_csv("A00068.csv");
// print tests
printf("CSV:%d\n", csv_data);
printf("SIZE:%d\n", csv_data.size());
【问题讨论】:
您的存储似乎正确,但您的打印肯定不正确。 您想硬编码这些值而不是从文件中读取?std::vector<std::vector<double>> csv_data 0.2,....,...., ...;
.
@463035818_is_not_a_number 可能有一个正则表达式可以进行这种转换;)
抛开所有的玩笑,您最好只阅读文件。阅读看起来不错,虽然我会使用 std::stof 它可以直接转换 std::strings 。我会使用基于范围的 for 循环和 cout 来输出向量的内容。
@PKramer 可能有任何东西的正则表达式,但这太真实了:xkcd.com/1171
【参考方案1】:
最明显的可能性是......
直接在代码中硬编码值:
std::vector<std::vector<double>> csv_data 0.2,....,...., ...;
另一种可能性是将文本文件包含为字符串。有关详细信息,请参阅此答案:https://***.com/a/25021520/4117728。您基本上会在文件的开头添加一些标记,最后,链接的答案表明:
R"=====( 0.2, 0.1, ... your numbers
... more numbers...
0.42, 3.141)====="
然后像这样包含文件:
std::string csv_contents =
#include "test.txt"
;
现在您有了一个需要解析的字符串,就像之前解析文件内容一样。因此,唯一的好处是现在您的数据可以嵌入到可执行文件中,而不是放在单独的文件中。如果您担心进行解析的成本,那么您可以考虑首先提到的替代方案。
【讨论】:
谢谢我以这种方式存储值 std::vector<:vector>> csv_data 0.2,....,...., ... ;一切都很好。以上是关于如何将数据存储在二维向量中?的主要内容,如果未能解决你的问题,请参考以下文章