gpt4 book ai didi

c - 有没有办法在包含同时具有数据和时间的列的数据文件中分隔列

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:16 24 4
gpt4 key购买 nike

所以我正在导入一个包含 5 列的数据文件,例如

1992-01-25T00:00:30.000Z|0.718|-0.758|-0.429|1.129

我知道 scanf() 允许您指定它正在扫描的数据类型,在本例中就是 %s%f。但我的问题是第一列,我想将其作为数字扫描或将该列拆分为两列,如 1992-01-25|00:00:30.000。使用 fgets() 是另一种选择吗?

有没有一种方法可以有效地做到这一点,因为我将每一列存储到数组中,然后我有一个针对每个数组的搜索函数,搜索包含字符串的数组会很痛苦。

最佳答案

您可以使用fgetsstrtoksscanf 来解析文件。

  • fgets 从文件中读取一行
  • strtok 使用 | 作为分隔符将行分成子字符串
  • sscanf 解析子串,将每个子串转化为数字

在下面的示例代码中,日期字段组合成一个整数。例如,
“1992-01-25”变成十进制数 19920125。合并时间字段,以便最终结果表示从午夜算起的毫秒数。

bool parseFile(FILE *fpin)
{
char line[256];
while (fgets(line, sizeof(line), fpin) != NULL)
{
// get the date/time portion of the line
char *dateToken = strtok(line, "|");

// extract the floating point values from the line
float value[4];
for (int i = 0; i < 4; i++)
{
char *token = strtok(NULL, "|");
if (token == NULL)
return false;
if (sscanf(token, "%f", &value[i]) != 1)
return false;
}

// extract the components of the date and time
int year, month, day, hour, minute, second, millisec;
char t, z;
sscanf(dateToken, "%d-%d-%d%c%d:%d:%d.%d%c",
&year, &month, &day, &t,
&hour, &minute, &second, &millisec, &z);

// combine the components into a single number for the date and time
int date = year * 10000 + month * 100 + day;
int time = hour * 3600000 + minute * 60000 + second * 1000 + millisec;

// display the parsed information
printf("%d %d", date, time);
for (int i = 0; i < 4; i++)
printf(" %6.3f", value[i]);
printf("\n");
}

return true; // the file was successfully parsed
}

关于c - 有没有办法在包含同时具有数据和时间的列的数据文件中分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926738/

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