gpt4 book ai didi

c - 如何将文件中的数据转换为C中的结构?

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

我必须创建一个函数,使用其他函数将数据(时间)从文件转换为结构。因此,从文件 (2018-06-01 01:00:00) 中取出它并将其转换为结构。首先是年,然后是月、日、小时、分钟和秒。

我对此有点陌生,所以我不知道如何正确使用 strtok 进行解析。

文件中的数据如下所示:

  • id;sensor_id;时间;m3
  • 12899;1;2018-06-01 01:00:00;0.0000
  • 150362;222;2019-11-14 14:00:00;0.2465
  • 150369;35;2019-11-14 15:00:00;0.2550
  • 。 。 。

这就是结构的样子。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef struct {
int year;
int month;
int day;
int hour;
int min;
int sec;
int dayInWeek;
}tDateTime;

以及函数的声明。我已经解决了“giveDayInWeek”函数。

tDateTime dejDateTime(char* datetime) //converts input from text file (2018-05-01 01:00:00) into structure, with using giveDayInWeek

int giveDayInWeek(int y, int m, int d) //returns dan in a week (0-Monday,…,6-Sunday)
{
static int t[] = { 0,3,2,5,0,3,5,1,4,6,2,4 };
y -= m < 3;
return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
}

我真的很感激帮助。谢谢

最佳答案

一个好的方法是,有一个函数返回您感兴趣的每个值(getYeargetMonth,...),该函数接收以下行:输入,并返回所需的值:

#include <stdio.h>
#include <string.h>
#define YEAR_LEN 4

typedef struct {
int year;
int month;
int day;
int hour;
int min;
int sec;
int dayInWeek;
}tDateTime;

int getYear(char* p_line){
char year[YEAR_LEN+1];
strncpy(year, p_line+8, 4);
year[YEAR_LEN] = '\0'; /* null character manually added */
return atoi(year);
}

int main(int argc, char** argv){
char const* const fileName = argv[1];
FILE* file = fopen("data.txt", "r");
char line[256];
tDateTime dt;

while (fgets(line, sizeof(line), file)) {
printf("line: %s\n", line);
dt.year = getYear(line);
printf("%d\n", dt.year);
}

fclose(file);
return 0;
}

在此工作之后,您还可以将所有函数调用分组到另一个函数中(例如 getData),这样代码更有组织性且更易于维护。

类似于:

tDateTime getData(char* p_line){
tDateTime res;
res.year = getYear(p_line);
res.month = getMonth(p_line);
return res;
}

关于c - 如何将文件中的数据转换为C中的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480924/

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