读取三个由时间戳和一个数值组成的txt文件,里面是随时间变化的曲线,将曲线时间对齐并输出为txt文件C++代码
时间: 2024-02-01 21:16:43 浏览: 96
以下是一个简单的C++代码示例,演示如何读取三个时间戳和数值组成的txt文件,将它们对齐并输出为一个txt文件。这里假设每个txt文件中的数据已经按时间戳排序。
```c++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
// 定义一个结构体表示每个数据点
struct DataPoint {
long long time; // 时间戳
double value; // 数值
DataPoint(long long t, double v) : time(t), value(v) {}
};
// 读取一个txt文件并返回一个包含数据点的向量
vector<DataPoint> readData(const string& filename) {
vector<DataPoint> data;
ifstream file(filename);
if (file.is_open()) {
long long time;
double value;
while (file >> time >> value) {
data.push_back(DataPoint(time, value));
}
file.close();
}
return data;
}
// 将多个数据点向量对齐,并返回一个包含对齐数据点的向量
vector<vector<DataPoint>> alignData(const vector<vector<DataPoint>>& data) {
vector<vector<DataPoint>> alignedData(data.size());
long long minTime = data[0][0].time;
long long maxTime = data[0][data[0].size() - 1].time;
for (int i = 1; i < data.size(); i++) {
minTime = max(minTime, data[i][0].time);
maxTime = min(maxTime, data[i][data[i].size() - 1].time);
}
for (int i = 0; i < data.size(); i++) {
int j = 0;
while (j < data[i].size() && data[i][j].time < minTime) {
j++;
}
while (j < data[i].size() && data[i][j].time <= maxTime) {
alignedData[i].push_back(data[i][j]);
j++;
}
}
return alignedData;
}
// 输出对齐数据点到一个txt文件
void writeData(const vector<vector<DataPoint>>& data, const string& filename) {
ofstream file(filename);
if (file.is_open()) {
for (int i = 0; i < data[0].size(); i++) {
file << data[0][i].time;
for (int j = 0; j < data.size(); j++) {
file << " " << data[j][i].value;
}
file << endl;
}
file.close();
}
}
int main() {
// 读取三个txt文件
vector<DataPoint> data1 = readData("data1.txt");
vector<DataPoint> data2 = readData("data2.txt");
vector<DataPoint> data3 = readData("data3.txt");
// 将多个数据点向量对齐
vector<vector<DataPoint>> alignedData = alignData({data1, data2, data3});
// 输出对齐数据点到一个txt文件
writeData(alignedData, "alignedData.txt");
return 0;
}
```
这个例子假设每个txt文件中有两列数据:时间戳和数值。在实际情况中,您可能需要根据自己的数据格式进行一些修改。
阅读全文