gpt4 book ai didi

c++ - 如何将文件中的日期时间解析为 C++ 中的类

转载 作者:行者123 更新时间:2023-11-30 04:02:10 25 4
gpt4 key购买 nike

我正在尝试从 C++ 中的 txt 文件中解析类数据。类数据如下所示,包含一些日期时间字符串、一些整数和一些整数。

txt 文件中的数据如下所示:

2014-08-01 02:06:53,3.9070,9

如何将文件中的数据解析到Class中?

面临的问题:1)从文件中获取日期时间的输入2) 将日期时间输入与其他数据输入分开。

最佳答案

您有多个问题,其中大部分与您的阅读和解析有关:

  • 每条记录(每行)包含三个值:一个日期时间戳和两个数值。您阅读了日期时间戳(这是错误的,我会回过头来看),然后您阅读了另外六个值

  • 当您读取数值时,您将它们读入临时缓冲区,然后使用输入流分配给结构字段。

  • 阅读中没有任何地方处理分隔值的逗号

  • 与逗号一样,您读取日期时间时无需考虑日期时间格式中的分隔符。

  • 您将日期时间字段读入单独的值,然后创建一个与文件中的格式完全相同的字符串。这并不是真正需要的(我会在下面告诉你原因)。

  • 日期时间存储在结构中作为字符串,那么如果您只是将它存储在字符串中,为什么要尝试解析它呢? DateTime::Parse 函数的真正作用是什么?


现在为了帮助您解决问题,C++ standard library 中有一些内容那可以帮助你。第一个是 std::getline功能,第二个是std::istringstream .

首先,我建议您完整地阅读文件中的每一行(使用 std::getline),将该行放入 std::istringstream 中并使用它对于解析,再次使用 std::getline

有点像

std::string line;
while (std::getline(in, line))
{
std::istringstream iss(line);

// Parse each line using the input string stream
}

std::getline 默认使用换行符作为分隔符,但可以告诉它使用任何单个字符,例如 ',':还要注意我将日期时间字符串直接放入您的结构中。

std::getline(iss, item->datetime, ',');

以上两行将完整的日期时间字符串放入datetime成员变量中。然后,您可以使用相同的方式轻松获取其他两个值:

std::string temp;

std::getline(iss, temp, ',');
item->open = std::stod(temp);

std::getline(iss, temp); // Last item in input, no need for separator
item->volume = std::stoi(temp);

(阅读 std::stodstd::stoi 。)

我从你的结构中随机挑选了两个成员字段来初始化,因为文件中的每条记录只有两个数字字段。

关于c++ - 如何将文件中的日期时间解析为 C++ 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25321527/

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