我是C ++编程的新手,我不确定输入和输出流的确切运作方式。我想要一个txt文件,其中包含由分隔符(':')分隔的字符串和字符,以分配类成员变量。
到目前为止,我能够得到一个txt文件,每行包含一个double或整数,并将它们分配给变量。目前我所拥有的:
10
3
0.80
1.5
我目前用于变量分配的代码:
#include <iostream>
#include <fstream>
RandomObject::RandomObject(){ //The Default Constructor
std::ifstream my_file;
my_file.open("Default.txt");
//Not sure if this the most effective way to do this...
if (my_file.is_open())
{
while (~my_file.eof())
{ my_file >> Var1; //Var1 is now an int with value 10
my_file >> Var2; //Var2 is now an int with value 3
my_file >> Var3; //Var3 is now double with value 0.80
my_file >> Var4; //Var4 is now double with value 1.5
break;
}
}
my_file.close();
}
现在我希望txt文件为:
每维数量:10
尺寸数量:3
数字密度:0.80
初始温度:1.5
我想将冒号后的值分配给成员变量:
int Var1 = 10;
int Var2 = 3;
double Var3 = 0.80;
double Var4 = 1.5;
和一些输出文本指示其中任何一个的变量初始化:
&#34;变量1设置为10&#34;
或
&#34;每维数字是10&#34;。
我该怎么做呢? txt文件将具有相同顺序的所有值,尽管将程序读取为&#34; Number Per Dimension&#34;作为第一个自动分配10到Var1的字符串,如果可能的话。
我猜测第一步是以某种方式将它分成两个字符串&#39;:&#39;作为分隔符并将其存储在一些临时字符串数组变量中?我不确定阅读该行并将值存储在上面的代码中究竟发生了什么。
我想了解文件流的实际工作原理。抱歉格式化不好。
答案 0 :(得分:1)
我不打算给你写一些代码,因为你上面有一个代码,所以我将向你解释我将如何做/以及如何工作并给你一些有用的链接。
使用INSERT INTO foo (a, b, c)
SELECT a_, b_, c_
-- hairy sql
ON CONFLICT (...condition...) DO UPDATE
SET "c"=???
读取一行。 std::getline(file_name,line)
有一个默认分隔符getline()
。因此它将整行存储在变量\n
中。
存储了line
返回的字符串变量,使用std::find
查找getline()
及其位置。它将返回":"
,与{size_t position
一起使用3}}和/或substr
函数将这两部分放在不同的变量中。
带有您的文字的字符串变量string var_text
将保持原样,但是您希望它为int
或double
的值需要修改。您必须首先将string var_text
与您想要的任何字符串进行比较。根据结果,您可以使用erase
将变量设置为int
或double
等
现在您已经拥有所需形式的变量,您可以将其存储在适当的类成员中。
只要getline()
返回1,就重复此操作。
答案 1 :(得分:0)
尝试更像这样的东西:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
RandomObject::RandomObject() //The Default Constructor
{
std::ifstream my_file("Default.txt");
std::string line;
while (std::getline(my_file, line))
{
std::istringstream iss(line);
std::string name;
std::getline(iss, name, ':');
if (name == "Number Per Dimension") {
iss >> Var1; //Var1 is now an int with value 10
std::cout << name << " is " << Var1 << std::endl;
}
else if (name == "Number of Dimensions") {
iss >> Var2; //Var2 is now an int with value 3
std::cout << name << " is " << Var2 << std::endl;
}
else if (name == "Number Density") {
iss >> Var3; //Var3 is now double with value 0.80
std::cout << name << " is " << Var3 << std::endl;
}
else if (name == "Initial Temperature") {
iss >> Var4; //Var4 is now double with value 1.5
std::cout << name << " is " << Var4 << std::endl;
}
}
}