文本通过循环扫描分组内容进行排除线
Text parsed line by line with loop scanning grouped content
在txt文件中,种群0和1每个都有其自己的参数值,以此为格式:
population 0
gK 9
gNa 35
gL 0.1
population 1
gK 9
gNa 35
gL 0.1
使用ifstream加载文件,使用getline和stringstream解析。
我尝试制作一个循环,使得当遇到包含" supers 0"的线时,其参数会根据模板" contents>> param_name>> param_val",按行读取,将参数名称与预期的字符串进行比较,其值分为相应的指针数组(即:总体0,GK = 9进入GK [0])
达到最后一个预期的参数,或达到下一个人群(i 1),跳到文本中的下一个人群(i 1)。
void Parameters::Initialize(ifstream & pfile) {
stringstream char_content;
string temp;
string line;
string param_name;
double param_val{ 0 };
while (getline(pfile, line)) {
stringstream contents(line);
if (contents.rdbuf()->in_avail() == 0) { // if
continue;
}
if (!(contents >> param_name >> param_val)) {
printf("error reading line from file. position: file %s line %dn", __FILE__, __LINE__);
throw "error reading file";
}
for (int i { 0 }; i <= 2; ++i) {
if ((param_name.compare("Population") == 0) && (param_val == i)) { //if condition satisfied, get subsequent lines up to next population
if (param_name.compare("gK") == 0); gK[i] = param_val;
if (param_name.compare("gNa") == 0); gNa[i] = param_val;
if (param_name.compare("gL") == 0); gL[i] = param_val;
if ((param_name.compare("Population") == 0) && (param_val == i + 1)) continue;
}
}
}
}
int main (){
cin >> file; // .txt file
std::ifstream paramFile(file);
P.Initialize(paramFile);
}
如果有人可以帮助制作工作版本。
阅读stringstream
后,您必须继续读取文件才能获取gK
的值,等等。
将param_val
称为int
。这样,您可以将param_val
与int
计数器进行比较。
将param_name
与较低的情况进行比较"population"
gK
等可以声明为 std::vector
,使用 push_back
方法将值添加到 vector
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
std::vector<double> gK, gNa, gL;
void Initialize(ifstream & pfile)
{
string line, param_name;
int param_val;
int counter = 0;
while(getline(pfile, line))
{
stringstream contents(line);
if(contents.rdbuf()->in_avail() == 0)
continue;
if(contents >> param_name >> param_val)
{
if(param_name == "population" && param_val == counter)
{
double val;
pfile >> line >> val;
gK.push_back(val);
if(line != "gK") cout << "errorn";
pfile >> line >> val;
gNa.push_back(val);
if(line != "gNa") cout << "errorn";
pfile >> line >> val;
gL.push_back(val);
if(line != "gL") cout << "errorn";
counter++;
}
}
}
for(int i = 0; i < counter; i++)
{
cout << "population " << i << "n";
cout << "gK " << gK[i] << "n";
cout << "gNa " << gNa[i] << "n";
cout << "gL " << gL[i] << "n";
}
}
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 文本通过循环扫描分组内容进行排除线
- 循环排除特定数字的倍数
- C++:使用嵌套的 if/else 语句循环进行故障排除
- C++:对循环进行故障排除
- 而循环排除条件