gpt4 book ai didi

c++ - 数据拖网常规的开始建议

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:54 26 4
gpt4 key购买 nike

我正在寻找一些关于创建数据拖网例程的最有效方法的一般性建议。我有 C++ 的基础知识。

我需要创建一个例程来搜索具有以下格式(示例)的文本文件:

4515397   404.4    62.5  1607.0     2.4     0.9 ...
4515398 404.4 62.3 1607.0 3.4 1.2 ...
4515399 404.4 62.2 1608.0 4.6 0.8 ...
4515400 405.1 62.2 1612.0 5.8 0.2 ...
4515401 405.9 62.2 1615.0 6.9 -0.8 ...
4515402 406.8 62.2 1617.0 8.0 -2.7 ...
4515403 406.7 62.1 1616.0 9.0 -5.3 ...

在上面的示例中,当第 5 列和第 6 列均小于 4 时,我想导出第 2 列和第 3 列的平均值。我实际上对第 1、4 或 7 列中的值不感兴趣(省略号正是它们在文件本身中的显示方式)。

更复杂的是,文件中偶尔会出现随机的文本字符串,如下所示(这些可以丢弃):

4522787   429.6    34.4  2024.0    .       .    ...
4522788 429.9 34.2 2022.0 . . ...
4522789 429.9 34.1 2022.0 . . ...
EFIX R 4522633 4522789 157 427.9 36.8 2009
4522790 429.3 34.2 2021.0 . . ...
END 4522791 SAMPLES EVENTS RES 23.91 23.82
MSG 4522799 TRIAL_RESULT 0
MSG 4522799 TRIAL OK

最后,每个文本文件包含五组数据,我打算对这些数据进行平均。这 5 个数据集中的每一个都以这样的线为界:

MSG 4502281 START_GRAB

MSG 4512283 END_GRAB

这些边界之外的所有东西都可以被丢弃。

因此,作为一个相对缺乏经验的程序员,我开始寻找实现目标的最有效方法。我最好的方法是什么?也就是说,C++ 对于这类任务是否不必要地复杂化?也许甚至已经有一个实用程序可以进行这种数据拖网?

我现在突然想到,我可以使用 Microsoft Excel 脚本来为我执行此操作。我想知道对此有何想法。

最佳答案

我将从朴素的方法开始,看看我能走多远:

#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>

int main()
{
std::ifstream infile("thefile.txt");
if (!infile) { return 0; }

std::vector<double> v2, v3;

std::string line;
while (std::getline(infile, line))
{
int id;
double col1, col2, col3, col4, col5, col6;
std::istringstream iss(line);

if (iss >> id >> col1 >> col2 >> col3 >> col4 >> col5 >> col6)
{
// we only get here if the first token is an integer!

if (col5 < 4.0 && col6 < 4.0)
{
v2.push_back(col2);
v3.push_back(col3);
}
}
else
{
iss.clear(); // clear error
std::string id;
if (iss >> id && id == "MSG")
{
// process the special block
}
}
}

// now compute the average of the v2 and v3:
double av2 = std::accumulate(v2.begin(), v2.end(), 0) / double(v2.size());
double av3 = std::accumulate(v3.begin(), v3.end(), 0) / double(v3.size());
}

关于c++ - 数据拖网常规的开始建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com