【问题标题】:How to store output data of a function in a text file如何将函数的输出数据存储在文本文件中
【发布时间】:2019-01-14 03:04:47
【问题描述】:

我有以下代码

    if (StartMonitor) //StartMonitor
    {

        TotalVoltage5s += CalculatePower();
        //TotalVoltage5s += 20;
        xx123++;

        CString sad;
        m_power_edit.GetWindowText(sad);

        int num1 = _ttoi(sad);
        if(xx123 >= num1){
            if(TotalTime > 19){

                Power_Log_Chart.ClearChart();
                TotalTime = 0;
            }



            CTime tm;
            tm=CTime::GetCurrentTime();
            CString str=tm.Format("%X");
            ostringstream os;
            ostringstream os1;
            float ds= (float)atof((char *)(LPTSTR)(LPCTSTR)sad);
            os << TotalVoltage5s/ds;
            os1 << m_frequency;
            m_power_list.InsertColumn(Current_columns,"",LVCFMT_CENTER,80,0);
            m_power_list.SetItemText(0, Current_columns, str);
            m_power_list.SetItemText(1, Current_columns, os.str().c_str());
            m_power_list.SetItemText(2, Current_columns, os1.str().c_str());
            m_power_list.SetItemState(Current_columns, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);  
            m_power_list.EnsureVisible(Current_columns, FALSE);

            Power_Log_Chart.SetXYValue(TotalTime, TotalVoltage5s/ds, TotalTime, 0);
            TotalTime++;
            TotalVoltage5s = 0;
            m_frequency = 0; 
            xx123 = 0;

        }

    }
    Power_Log_Chart.Invalidate();
}
CDialog::OnTimer(nIDEvent);

}

它的作用很简单,它获取函数 CalculatePower 的输出,每 5 秒实时绘制和显示其结果,它对频率和时间做同样的事情。

我需要一种将数据保存在文本文件中的方法,这是我尝试做的,但我不确定它是否会起作用。

        SavePowerData[32780] =TotalVoltage5s; 
        SaveTimeData[32780] = TotalTime; 
         ofstream myfile;
         myfile.open ("Power Data.txt");
        for(int x=0; x<=TotalVoltage5s; x++)
        {
         myfile << SavePowerData[x];
         myfile << SaveTimeData[x]; 
        }
        myfile.close();

【问题讨论】:

  • 您是否尝试以附加模式打开文件?
  • 不,我还没试过。

标签: c++ visual-c++-6


【解决方案1】:
#include <fstream>

void append_file(std::string param1,std::string param2, std::string param3){  
  std::ofstream outfile;

  outfile.open("out.txt", std::ios_base::app);
  outfile << param1 << " " << param2<< " " << param3; 
}

您可以尝试像这样封装您的方法,并每次将您想要的值附加到文件中,然后再将它们放入您的绘图中。您还可以在每 3 个参数的末尾使用分隔符,以便之后更容易阅读。

【讨论】:

  • 这个方法需要另一个 void 函数吗?或者我可以在我当前的函数中编写代码。还有一个问题,我的意思是这种编码方式(SaveTimeData[32780] = TotalTime;)对于保存实时数据是否正确?
  • 你不需要为它创建另一个函数,你可以把代码放在你的代码中。如果它是实时数据,则意味着您将继续获取数据,因此始终将其放入内存中,您可能会耗尽内存。我建议限制您存储在内存中的数量并仅显示;图表中的最后 10 分钟并将旧条目保存在文件中。希望这会有所帮助!
  • 非常感谢 Yigit,这就是我所做的,它为 (int q = 0; q
【解决方案2】:

谢谢Yigit,这就是我所做的并且成功了,

for (int q = 0; q<=TotalTime; q++)
{ 
Time_[q] = TotalTime;  
voltage[q] = TotalVoltage5s;
Frequency[q] = m_frequency;}
std::ofstream outfile;
 outfile.open("Power Data.csv", std::ios_base::app);
outfile<<"Total Time"<<"   "<<"Total Voltage 5 sec"<<"   "<<"Frequency"<<endl; 
for(int k = 0; k<TotalTime; k++){outfile<<voltage[k]<<", "<<Time_[k]<<", "<<Frequency[k]<<endl;} 
outfile.close();

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2021-02-15
    • 1970-01-01
    • 2020-10-27
    • 2015-03-03
    • 2016-04-22
    • 2016-12-28
    • 2023-02-10
    • 2020-01-22
    相关资源
    最近更新 更多