将文件中的数据分解为结构

时间:2014-12-04 18:03:36

标签: c struct

我有一个包含数据的预读文件并将其存储在一个缓冲区中,我希望通过该缓冲区运行一个结构来过滤掉数据,然后将文件重新保存在不同的位置

我的代码读取数据:

File *p_file

char fileLocation[40];
char buff[1000];

printf("\nEnter file name: \n");
scanf("%s, fileLocation);

p_file = fopen(fileLocation, "r");

if(!p_file)
{
    printf("\nError!\n");
}

while(fgets(buff, 1000, p_file) != NULL)
{
    printf("%s", buff);
}

fclose(p_file);

以下是数据的示例输出:

0001:0002:0003:0021:CLS 

现在,当数据存储在缓冲区中时,我希望通过结构对此进行排序,例如:

//Comments are the data to be filtered into the struct
struct file{
    int source;      //0001
    int destination; //0002
    int type;        //0003
    int port;        //0021
    char data[20];   //CLS
}

但是我不知道我将通过什么程序来分解数据,并且会感激任何帮助

1 个答案:

答案 0 :(得分:1)

您有两个任务:将缓冲区中的字符分隔为单独的字段,然后将每个字段中的字符转换为正确的内部表示。

我假设你正在硬编码这个确切的案例(5个字段带有你上面给出的名字)。我还假设您正在使用C并希望坚持使用标准库。

使用strtok()函数解决了第一个问题(将缓冲区分成单个字段)。

第二个问题(将包含数字的字符串转换为整数)是使用atoi()或atol()或strtol()函数完成的。 (它们都略有不同,所以选择最适合你需要的那个。)对于角色领域,你需要得到一个指向角色的指针;在你的"文件"结构,您使用" char数据",但只包含一个字符。

struct file { int source; int destination; int type; int port; char* data; } mydata;
while(fgets(buff, 1000, p_file) != NULL)
{
    mydata.source = atoi(strtok(buff, ":"));
    mydata,destination = atoi(strtok(0, ":"));
    mydata,type = atoi(strtok(0, ":"));
    mydata,port = atoi(strtok(0, ":"));
    mydata,data = strtok(0, ":");

    /* Now you can use the mydata structure. Be careful; mydata.data points directly
       into your buff buffer. If you want to save that string, you need to use strdup()
       to duplicate the string, and you'll then be responsible for freeing that memory.
     */
}