【问题标题】:Determining lowest and highest value from a column in a text file (c++) [closed]从文本文件中的列确定最低和最高值(c++)[关闭]
【发布时间】:2013-12-09 03:03:27
【问题描述】:

我从事这个项目已经有一段时间了,或者更确切地说,我一直在尝试弄清楚如何从事这个项目。总的来说,我是一个非常棒的编程新手(可能从 c++ 开始是一个巨大的错误,但无论如何),所以请记住这一点。

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

然而,这只是文件的一角,实际文件大约大 1000 倍(但我认为应该没什么区别)。

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

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

我正在考虑故意简化分配,只使用带有电压列的文本文件并确定最低和最高值,仅此而已。

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

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

【问题讨论】:

  • 请出示您的代码
  • 您的逻辑没问题,请注意您需要多一个变量才能找到最低值。您可以尝试在小文件上登录以交叉检查您的代码是否正常工作。
  • 即使您的问题是题外话或您的问题已解决:不要将其替换为“没关系”。如果您不再喜欢它,您可以随时投票删除您的问题。

标签: c++ iostream fstream


【解决方案1】:

这是另一种方法。

#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;
}

【讨论】:

    【解决方案2】:

    希望这个伪代码有所帮助!

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2014-05-27
    • 2021-11-12
    相关资源
    最近更新 更多