-1

使用 fgetc() 和/或 read() 如何从文件中获取键和值?这是它在文件中的写入方式:

 <key1,val1><key2,val2><key3,val3>

我需要将每个键和值放在一个新数组中(做链表)。

因此,使用'<'and插入文件是没有问题的。问题是如何获得它们?有任何想法吗?'>'','

这就是我所拥有的。

FILE * file;
char* key;
char* value;
int c;//apparently I have to use an int
file=fopen("myfile.txt", "r");
c=fgetc(file);
while(c != EOF)
{
   c=fgetc(file);
   if(c == '<'){
      for(int i=0; c != ','; i++)
      {
         key[i]=fgetc(file);
      }
   }
}

这是直到第一个逗号。现在我缺乏一点算法概念。请帮忙。

4

1 回答 1

2

它必须是 fgetc 和 read 吗?..这是一种方法:

     while(!feof(your_file_name)){
        bzero(line, sizeof(line)); // line is a char array ... make sure its of sufficiently large size
        fgets(line,100,your_file_name); // I am reading 100 characters  .. you can change that number as per your file accordingly
     }

    fclose(your_file_name);

    sscanf(line,"<%d,%d><%d,%d><%d,%d>",&key1,&val1,&key2,&val2,&key3,&val3); //  assuming keys and vals are ints

您在代码中所做的是逐字符读取文件.. 为什么要经历所有这些痛苦?

usingfgets将一口气读取整个文件......然后知道文件的格式sscanf是从中恢复信息的非常强大的工具


好的,所以您在评论中发布了键和值是字符串..所以将 sscanf 更改为:

sscanf(line,"<%[^,]%[^>]<%[^,]%[^>]<%[^,]%[^>]",key1,val1,key2,val2,key3,val3);

好的,让我解释一下

在处理 sscanf 中的字符串时,您必须指定分隔符。

所以这<%[^,]告诉 sscanf - 从这个字符之后开始读取一个字符串<并读取它直到你到达,字符......

于 2013-11-29T00:57:10.483 回答