从C ++中的文本文件读取多个变量

时间:2020-08-26 08:37:46

标签: c++

我现在正在使用单独的文本文件分配每个变量。我有这种形式的东西:

double ft_means[3];
double ft_std_dev[3];
inputFile.open("mean.txt");
if (!inputFile)
cout<< "Error";
count=0;
while(!inputFile.eof())
{
    inputFile >> ft_means[count];
    count++;
}

count= 0;
ifstream inputFile2;
inputFile2.open("std_dev.txt");
if (!inputFile2)
cout<< "Error";
count=0;
while(!inputFile2.eof())
{
    inputFile2 >> ft_std_dev[count];
    count++;
}
char line[20];
std::string words[405];
int i=0;
std::ifstream myfile ("features.txt");
if (myfile.is_open())
    {
        for(i=0; i<3; ++i) {
        myfile.getline(line, 3);
        words[i]=line;
        strcpy(line, "");
    }
    myfile.close();
}

我当前的文本文件具有以下格式:

Mean.txt: 
11
23
36
std_dev.txt:
34
42
22
features.txt
abc[0]
abc[1]
abc[3]
abc[4]*abc[5]

我的问题是如何为同一文本文件中的每个变量分配相应的行。我不再需要单独的文本文件,而只需要一个包含所有行的文本文件,然后将每个变量分配给文本文件的相应行。 例如,新的文本文件格式可以是以下形式:

11
23
36

34
42
22

abc[0]
abc[1]
abc[3]
abc[4]*abc[5]

2 个答案:

答案 0 :(得分:1)

假设文件中具有不同的块,则可以使用以下结构:

std::string line;

// output variables
std::vector<double> means;
std::vector<double> stddevs;
std::vector<std::string> expressions;

// part one: means
while (std::getline(inputFile, line) && !line.empty()) {
    double mean;
    std::istringstream(line) >> mean;
    means.push_back(mean);
}

// part two: stddevs
while (std::getline(inputFile, line) && !line.empty()) {
    double stddev;
    std::istringstream(line) >> stddev;
    stddevs.push_back(stddev);
}

// part three: expressions
while (std::getline(inputFile, line) && !line.empty()) {
    expressions.push_back(line);
}

每个while循环中的条件都会检查您是否尚未到达文件末尾,以及是否刚刚读取了空行。 std::istringstream对象将字符串转换为流,因此您可以在其上使用常规提取运算符。

您可以添加一些using语句以将各种类纳入范围,以便摆脱一些std::杂音,但这取决于您。

答案 1 :(得分:0)

  1. 编写一个函数以获取每个文件中存储的x个值
  2. 将其存储在x变量中
  3. 现在使用值x再次迭代文件内容。这样您就可以知道要手动迭代和分配多少
相关问题