确定文本文件中列的最低和最高值(c ++)

时间:2013-12-09 03:03:27

标签: c++ iostream fstream

我已经在这个项目上工作了一段时间,或者更确切地说,我一直试图弄清楚如何在这个项目上工作一段时间。我一般都是编程方面的新手(可能从c ++开始是一个巨大的错误,但无论如何),所以请记住这一点。

我有一个如下所示的文本文件:http://pastebin.com/19Bbg1pV

然而,这只是文件的提示,实际文件大约1000倍(但我认为不应该有所作为)。

我要求做的是打开文件,确定最高和最低电压是多少,以及发生的时间(忽略安培)。

我该怎么做?我已经尝试了几件事,问题是我的时间快到了所以我没有更多的时间去尝试各种各样的东西,所有我设法到目前为止都是读取文本文件并显示它,这不是什么我被问到了,但这是关于流和打开文件我唯一能掌握的。

我正在考虑故意减少任务,只有一个带有电压列的文本文件,并确定最低和最高值,没有别的。

我要做的是从电压开始读取第一行,然后将该值分配给变量,然后读取下一行,如果该行的值不大于前一行,则忽略它,然后移动到下一行,但如果它更大,则存储该值,然后转到下一行,重复直到文件结束。然后简单地输出存储在该变量中的任何内容,该变量应该是最大的变量。

我该怎么做?请帮助,我开始失去希望。

2 个答案:

答案 0 :(得分:0)

希望这个伪代码有帮助!

f = fopen("your-filename.txt");

min_volt = DBL_MAX;

while (!f.eof())
{
  // fgetline() is a C library function to read a line from the file.
  line = fgetline(f);

  // The function split() takes the line to be splitted and returns
  // the array of strings in the second parameter (here it is tokens).
  // The function returns how many entries are there in tokens.
  num_tokens = split(line, tokens);

  if (num_tokens >= 2)
  {
    // strtod() is a C library function to convert string to double
    time = strtod(tokens[0]);
    voltage = strtod(tokens[1]);
    ampere = strtod(tokens[2]);

    if (voltage < min_volt)
    {
      min_volt = voltage;
      min_time = time;
    }
  }
}

答案 1 :(得分:0)

这是另一种方法。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <numeric>

int main()
{
    std::ifstream f("test.txt");
    if(!f)
    {
        std::cerr << "Could not open file!\n";
        return -1;
    }

    //eat header
    std::string dummy;
    std::getline(f, dummy);

    double time_low = std::numeric_limits<double>::max();
    double volt_low = std::numeric_limits<double>::max();
    double time_high = std::numeric_limits<double>::min();
    double volt_high = std::numeric_limits<double>::min();
    double time, volt, amp;

    while(f >> time >> volt >> amp)
    {
        if(volt < volt_low)
        {
            volt_low = volt;
            time_low = time;
        }
        if(volt > volt_high)
        {
            volt_high = volt;
            time_high = time;
        }
    }

    std::cout << std::fixed << std::setprecision(6);
    std::cout << " low: " << volt_low << " at " << time_low << "\n";
    std::cout << "high: " << volt_high << " at " << time_high << "\n";
    return 0;
}