读取三个由时间戳和一个数值组成的txt文件,里面是随时间变化的曲线,将曲线时间对齐并输出为txt文件C++代码
时间: 2024-02-01 20:16:33 浏览: 87
以下是一个简单的C++代码示例,用于读取三个由时间戳和一个数值组成的文本文件,将它们对齐并输出为一个新的文本文件。
假设三个文本文件的格式如下:
```
# File 1
1546300800 10.5
1546300801 11.1
1546300802 12.3
...
# File 2
1546300799 9.8
1546300800 10.2
1546300801 11.5
...
# File 3
1546300798 9.2
1546300800 10.3
1546300802 12.1
...
```
其中,第一列为时间戳(这里假设是 Unix 时间戳),第二列为数值。
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义一个结构体,用于存储每个时间戳和对应的数值
struct DataPoint {
int timestamp;
double value;
};
// 读取指定文件的数据,并返回一个包含所有数据点的向量
vector<DataPoint> readDataFromFile(const string& filename) {
vector<DataPoint> dataPoints;
ifstream inputFile(filename);
if (inputFile) {
int timestamp;
double value;
while (inputFile >> timestamp >> value) {
dataPoints.push_back({timestamp, value});
}
inputFile.close();
}
return dataPoints;
}
// 将所有数据点按照时间戳从小到大排序
void sortDataPoints(vector<DataPoint>& dataPoints) {
sort(dataPoints.begin(), dataPoints.end(), [](const DataPoint& a, const DataPoint& b) {
return a.timestamp < b.timestamp;
});
}
// 将所有数据点对齐到指定时间戳上,并返回一个包含所有对齐后数据点的向量
vector<DataPoint> alignDataPoints(const vector<vector<DataPoint>>& allDataPoints, int alignTimestamp) {
vector<DataPoint> alignedDataPoints;
for (const auto& dataPoints : allDataPoints) {
auto it = lower_bound(dataPoints.begin(), dataPoints.end(), DataPoint{alignTimestamp, 0.0}, [](const DataPoint& a, const DataPoint& b) {
return a.timestamp < b.timestamp;
});
if (it != dataPoints.end()) {
alignedDataPoints.push_back(*it);
}
}
return alignedDataPoints;
}
// 将所有对齐后的数据点写入指定文件
void writeAlignedDataToFile(const vector<DataPoint>& alignedDataPoints, const string& filename) {
ofstream outputFile(filename);
if (outputFile) {
for (const auto& dataPoint : alignedDataPoints) {
outputFile << dataPoint.timestamp << " " << dataPoint.value << endl;
}
outputFile.close();
}
}
int main() {
// 读取三个文本文件中的数据
auto dataPoints1 = readDataFromFile("file1.txt");
auto dataPoints2 = readDataFromFile("file2.txt");
auto dataPoints3 = readDataFromFile("file3.txt");
// 将所有数据点按照时间戳从小到大排序
sortDataPoints(dataPoints1);
sortDataPoints(dataPoints2);
sortDataPoints(dataPoints3);
// 获取所有数据点中最早的时间戳
int minTimestamp = min({dataPoints1.front().timestamp, dataPoints2.front().timestamp, dataPoints3.front().timestamp});
// 对齐所有数据点到最早的时间戳
auto alignedDataPoints1 = alignDataPoints({dataPoints1, dataPoints2, dataPoints3}, minTimestamp);
// 将对齐后的数据点写入新的文本文件
writeAlignedDataToFile(alignedDataPoints1, "aligned.txt");
return 0;
}
```
代码中使用了 STL 中的向量、算法等容器和函数。首先,`readDataFromFile` 函数读取指定文件的数据,并返回一个包含所有数据点的向量。`sortDataPoints` 函数将所有数据点按照时间戳从小到大排序。`alignDataPoints` 函数将所有数据点对齐到指定的时间戳上,并返回一个包含所有对齐后数据点的向量。`writeAlignedDataToFile` 函数将所有对齐后的数据点写入指定文件。
在 `main` 函数中,首先读取三个文本文件中的数据,然后将所有数据点按照时间戳从小到大排序。接着,获取所有数据点中最早的时间戳,然后对齐所有数据点到最早的时间戳。最后,将对齐后的数据点写入新的文本文件。
阅读全文