gpt4 book ai didi

c++ - 为模拟解析数据文件的优雅方式

转载 作者:行者123 更新时间:2023-11-30 01:00:31 24 4
gpt4 key购买 nike

我正在从事这个项目,我需要从 .dat 文件中读取大量数据并使用这些数据来执行模拟。我的 .dat 文件中的数据如下所示:

DeviceID  InteractingDeviceID InteractionStartTime InteractionEndTime
1 2 1101 1105

1,2 1101 和 1105 是制表符分隔的,表示设备 1 在 1101 毫秒与设备 2 交互并在 1105 毫秒结束交互。

我有一个跟踪数据集,其中汇集了数以千计的此类交互,我的工作是分析这些交互。

第一步是解析文件。选择的语言是C++。我考虑采用的方法是读取文件,为读取的每一行创建一个设备对象。此设备对象将包含属性 DeviceId 和一个结构数组/vector ,其中将包含给定 DeviceId 在模拟过程中与之交互的所有设备的列表。该结构将包含交互设备 ID、交互开始时间和交互结束时间。

我有两个问题:

  1. 我的做法正确吗?

  2. 如果我在正确的轨道上,我如何使用 C++ 快速解析这些制表符分隔的数据文件并创建 Device 对象而不产生过多的内存开销?

我们将不胜感激朝着正确的方向前进。

谢谢

最佳答案

根据您提供的信息,您的方法似乎是正确的。

我假设你会创建一个类似这样的类:

class device {
public:
int id;
vector<interaction> interactions;
void add_interaction(interaction add_me); // uses vector::insert
};

typedef struct interaction_t {
int other_device_id;
int start_time;
int end_time;
} interaction;

此时,您应该能够一次读入文件一行,然后提取数据。

device* pDev = NULL;
interaction new_interaction;
ifstream ifs( "data.dat" );
char temp[MAX_LINE_LENGTH+1];
int id, other_id, start, end;

while(ifs.getline(temp, MAX_LINE_LENGTH)) {
sscanf(temp, "%i\t%i\t%i\t%i",
&id,
&new_interaction.other_device_id,
&new_interaction.start_time,
&new_interaction.end_time);
pDev = find_device_by_id(id);
pDev->add_interaction(new_interaction);
}

代码未经测试,仅供说明之用,但您可以理解。诀窍是编写 find_device_by_id 函数(将返回指向具有匹配 id 字段的 device 对象的指针)。这不应该要求每个输入行的内存开销太大;如果您的输入文件很大,您可能无法将数据存储在内存中,而可能不得不存储在数据库中。

关于c++ - 为模拟解析数据文件的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2517019/

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