字符串和输入文件,从包含字符串的txt文件中指定多个变量值

时间:2017-06-08 20:49:42

标签: c++ string file variables input

我是C ++编程的新手,我不确定输入和输出流的确切运作方式。我想要一个txt文件,其中包含由分隔符(':')分隔的字符串和字符,以分配类成员变量。

到目前为止,我能够得到一个txt文件,每行包含一个double或整数,并将它们分配给变量。目前我所拥有的:

当前" Default.txt"

  

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文件为:

新的&#34; Default.txt&#34;

  

每维数量: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;作为分隔符并将其存储在一些临时字符串数组变量中?我不确定阅读该行并将值存储在上面的代码中究竟发生了什么。

我想了解文件流的实际工作原理。抱歉格式化不好。

2 个答案:

答案 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将保持原样,但是您希望它为intdouble的值需要修改。您必须首先将string var_text与您想要的任何字符串进行比较。根据结果​​,您可以使用erase将变量设置为intdouble

现在您已经拥有所需形式的变量,您可以将其存储在适当的类成员中。

只要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;
        }
    }
}