从文本文件计算
Calculations from Text Files
我有一个包含如下值的文本文件:
2013 05 27 15 52 02.049824 231.401 0.022 49.738 2013 05 27 15 52 02.668822 229.814 0.019 49.738 2013 05 27 15 52 03.283705 228.528 2.599 49.726 2013 05 27 15 52 03.898469 230.140 2.576 49.751列 1 = 日期,列 2 = 月,列 3 = 天,列 4 = 小时,列 5 = 分钟,列
6 = 秒,列 7 = 电压(vrms),列 8 = 当前(irms),列 9 = 频率(Hz)。
我必须开发一个程序来分析24小时内这些时间采样的电压和电流测量值,并找到24小时内每小时使用的总能量,平均和峰值功耗以及使用的能量。
我该怎么做?
我还必须包括至少一种数值积分技术。
文件数据包含上述格式的 50,000 多行。
如何输入数据?这就是我尝试过的。
using namespace std;
class DataTable{
public:
int year;
int month;
int day;
int hour;
int minute;
double seconds;
double voltage;
double current;
double frequency;
};
int main(){
DataTable Data;
ifstream DataFile("Data.txt");
if (!DataFile)
cout << "Unable to open" << endl;
int year1, month1, day1, hour1, minute1;
double seconds1, voltage1, current1, frequency1;
while(DataFile >> year1 >> month1 >> day1 >> hour1 >> minute1 >> seconds1 >> voltage1 >> current1 >> frequency1)
{
Data.year = year1;
Data.month = month1;
Data.day = day1;
Data.hour = hour1;
Data.minute = minute1;
Data.seconds = seconds1;
Data.voltage = voltage1;
Data.current = current1;
Data.frequency = frequency1;
}
return 0;
}
如何输入数据?
您希望有一个std::vector<DataTable>
,您可以在其中存储填充在 while 循环中的Data
实例的副本:
int main() {
ifstream DataFile("Data.txt");
if (!DataFile) {
cout << "Unable to open" << endl;
return -1;
}
int year1, month1, day1, hour1, minute1;
double seconds1, voltage1, current1, frequency1;
std::vector<DataTable> records;
while(DataFile >> year1 >> month1 >> day1 >> hour1 >> minute1 >> seconds1 >>
voltage1 >> current1 >> frequency1) {
DataTable Data;
Data.year = year1;
Data.month = month1;
Data.day = day1;
Data.hour = hour1;
Data.minute = minute1;
Data.seconds = seconds1;
Data.voltage = voltage1;
Data.current = current1;
Data.frequency = frequency1;
records.push_back(Data);
}
// Do something with records ...
return 0;
}
另一种选择是为结构重载operator>>
:
class DataTable{
public:
friend std::istream& operator>>(std::istream& inp, DataTable& dt);
int year;
int month;
int day;
int hour;
int minute;
double seconds;
double voltage;
double current;
double frequency;
};
std::istream& operator>>(std::istream& inp, DataTable& dt)
{
inp >> year;
inp >> month;
inp >> day;
inp >> hour;
inp >> minute;
inp >> seconds;
inp >> voltage;
inp >> current;
inp >> frequency;
return inp;
};
您的输入循环将如下所示:
std::vector<DataTable> data;
DataTable dt;
while (DataFile >> dt)
{
data.push_back(dt);
}
这种范式的一个优点是数据结构可以在不影响输入循环的情况下更改。
相关文章:
- 如何计算文件中的"columns"数?
- 如何计算文件中的生物数量?
- 你如何计算文件中的字符
- 计算文件中不使用 getline() 的行数
- 我的逻辑有什么问题?尝试计算文件中包含特定字符的单词数
- 如何使用Boost计算文件的MD5
- C++:计算文件中ASCII字符的频率
- 计算文件中字符的频率.C++
- C++ 计算文件中两个单词之间的单词
- 创建一个读取的程序计算C 文件中的行数
- 计算文件夹C++窗口中的目录数
- C++ 使用类来计算文件中的行数
- 逐行计算文件:EOF 重复最后一个数字(不能使用中断)
- 你如何计算文件中的整数数量?(C++)
- 计算文件的熵
- 如何计算文件中的字符、行和单词
- 计算文件中的整数并复制到动态数组
- 计算文件C++中每行的整数数量
- 如何计算文件的增量,即更改的文件部分
- 如何在C或c++中计算文件的哈希值