如何从文件到结构中读取日期?

时间:2014-06-06 14:38:49

标签: c

我很难找到解决方案,主要是因为热门搜索者认为数据和日期是相同的,按日期我的意思是例如11/10/2014 9:00。

好吧我有一个结构

struct Rezervations{
    char user_login[10];
    int room_number;
    char date[40];
} rezervations[100];

我有文件“reservations.txt”,我拿着我的数据是这样的:

  

LOGIN1; 5; 11/10/14 09:00:00; LOGIN2; 1; 12/10/14 09:00:00;

到目前为止,我正在使用if这样的

来阅读此类文件
int loadReservation()
{
    char reserved[200];
    char temNumber[2];
    fp=fopen("rezervations.txt", "r");
    fscanf(fp, "%s", reserved);
    int i;
    int z=0;
    int k=0;
        char temp[10];
    for(i=0;i<strlen(reserved);i++)
    {
        int j=0;
        while(reserved[i]!=59)
        {
            temp[j]=reserved[i];
            j++;
            i++;
        }
        if (z==0||z%3==0)
            {
            memcpy(reservations[k].user_login,temp,j);
        }
            else if (z==1||z%3==1)
            {
            memcpy(tempLiczba,temp,j);
            reservations[k].room_number = tempLiczba[0] - '0';
        } 
            else if (z==2||z%3==2)
            {
            memcpy(reservations[k].date,temp,j);
            k++;
        }
        z++;
    }
    fclose(fp);
    return k;
}

我知道这段代码很乱,但我希望你能看到我在这里想要完成的事情。我还没有使用malloc(例如reserved),但这不是我的问题,我想知道如何阅读这个日期。 但不幸的是,对于我约会,它停止了工作。我猜它停止了工作,因为我的日期包含/:,但我不知道如何绕过它。此日期由strftime()生成,我不想更改它。 另外,如果您可以查看rezervations[k].room_number = tempLiczba[0] - '0';,因为这就是我从文本文件中读取整数的方式。

1 个答案:

答案 0 :(得分:1)

嗯,在C中可能有一百种方法可以实现这一点,但是一种(简单的方法)可能是使用sscanf的一种变体。

http://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm

实施例/伪代码

char * line_from_file = read_next_line();
sscanf(line_from_file, "%s;%d;%s", rezervations[k].user_login, &rezervations[k].room_number, rezervations[k].date);

编辑:

也许%s只停止在空格上阅读,而你的分隔是分号,你可能需要像

这样的东西
sscanf(line_from_file, "%[^;];%d;%[^;]", ...)