Baderd94 Ответов: 2

Как я могу сохранить данные в реальном времени в текстовом файле


Привет, у меня есть следующий код

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;
        float ds= (float)atof((char *)(LPTSTR)(LPCTSTR)sad);
        os << TotalVoltage5s/ds;
        ostringstream os1;
        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.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;


То, что он просто делает, он принимает вычисленное значение функции Calculatepower() и отображает результаты каждые 5 секунд, используя Totalvoltage5s и TotalTime. Мне нужен способ сохранять эти данные в текстовом файле каждые 19 секунд.

Что я уже пробовал:

Я пытался сохранить данные с помощью цикла FOR, но постоянно получаю ошибку.

jeron1

и что за ошибка будет?

Baderd94

именно это я и пытался сделать,

for (int q =0; q< 19; q++)
{
SavePowerData[q] = TotalVoltage5s;
}

но когда я показываю данные, это не дает никаких результатов, поэтому пустой файл, где SavePowerData является глобальной переменной

jeron1

На какой файл вы ссылаетесь?

Patrice T

а сообщение об ошибке есть ?

Baderd94

У меня есть следующий код

for (int q =0; q< 19; q++)
{
SavePowerData[q] = TotalVoltage5s;
SaveTimeData[q] = Общее время;
}

Для хранения данных, то у меня есть еще одна функция под названием onsavedata, в сторону этой функции я ставлю следующую

CString str10;
CFileDialog FileDlg10(ложь," ","мощность Data.txt журнал",OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , "текстовый файл(*.в формате txt)|*.txt|все(*.*)|*.*|");
if(FileDlg10.DoModal()==IDOK)
{
ofstream ofs(FileDlg10.GetPathName());
ofs.write(str10,str10.Метода getlength может служить метод());
ОФС.рядом();
AfxMessageBox("Сохранено!");
}
еще
{
AfxMessageBox("не удалось сохранить!");
}
ofstream PowerData(FileDlg10.GetPathName(), ios::out);

PowerData<<SavePowerData<<endl;

PowerData.рядом();

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

jeron1

Файл 'ОФС' ничего не содержат, поскольку CString 'str10-это пустое. Для 'файл PowerData', у вас для каждой записи в массиве SavePowerData, которые вы можете использовать цикл for, чтобы сделать.

[no name]

Где это для ... петли?

2 Ответов

Рейтинг:
4

Baderd94

Этот код работает для меня:


std::ofstream outfile;
outfile.open("Real-Time.csv", std::ios_base::app);
outfile<<TotalTime<<", "<<os.str().c_str()<<", "<<os1.str().c_str()<<endl; 


Рейтинг:
2

Baderd94

Нет необходимости в цикле for, следующий код сохранит данные для нас в файле excel:

std::ofstream outfile;
outfile.open("Real-Time.csv", std::ios_base::app);
outfile<<TotalTime<<", "<<os.str().c_str()<<", "<<os1.str().c_str()<<endl;
outfile.close();