我对 C++ 比较陌生,我想问一下如何“从文件中生成变量”。我想编写一个程序来读取文件并使用符号作为标记,就像分配语言一样。
我希望它发出这样的频率:
!frequency:time,frequency:time;//!=start/;=end
这是我如何理解你的问题。你有一个文件test.txt
:
time freq
0.001 12.3
0.002 12.5
0.003 12.7
0.004 13.4
然后你想读入这个文件,这样你就可以time
在一个容器中,在另一个容器freq
中进行进一步处理。如果是这样,那么您的程序是这样的:
#include<iostream>
using namespace std;
int main()
{
ifstream in_file("test.txt");
string label1, label2;
float val;
in_file >> label1; //"time"
in_file >> label2; // "freq"
vector<float> time;
vector<float> freq;
while (in_file >> val)
{
time.pushback(val);
in_file >> val;
freq.pushback(val);
}
}
对我在评论中提到的更通用的解决方案:
#include <iostream>
#include <sstream>
int main()
{
std::map<std::string, std::vector<double> > values_from_file;
std::ifstream in_file("test.txt");
std::string firstLine;
std::getline(in_file, firstLine);
std::istringstream firstLineInput(firstLine);
// read all the labels (symbols)
do
{
std::string label;
firstLineInput >> label;
values_from_file[label] = std::vector<double>();
} while(firstLineInput);
// Read all the values column wise
typedef std::map<std::string, std::vector<double> >::iterator It;
while(in_file)
{
for(It it = std::begin(values_from_file);
it != std::end(values_from_file);
++it)
{
double val;
if(in_file >> val)
{
it->second.push_back(val);
}
}
}
}