2010-04-14 52 views
4
字符

说我有一个格式的文件:阅读文件,直到用C

key1/value1 
key2/value2 
key3/value3 
.... 

说我有一个数组来保存这些值:

char *data[10][10] 

我将如何读这个文件并将key1,key2和key3分配到数据[0] [0],数据[1] [0]和数据[2] [0]中。然后将value1,value2和value3放入数据[0] [1],数据[2] [1]和数据[3] [1]中。所以实际上我想单独获取key1-key3的字符串,然后测试'/'字符,然后获取value1-3的字符串。顺便说一句,当我将这些文件输入到文件中时,我将包含'\ n'字符,以便您可以测试该文件以测试换行符。

回答

5

最好的方法是将每行数据读入缓冲区,然后解析缓冲区。这可以扩展到读取大块数据。使用fgets将数据读入缓冲区。使用strchr找到分隔符。

实施例:

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

#define MAX_TEXT_LINE_LENGTH 128 


int main(void) 
{ 
    FILE * my_file("data.txt", "r"); 
    char text_read[MAX_TEXT_LINE_LENGTH]; 
    char key_text[64]; 
    char value_text[64]; 

    if (!my_file) 
    { 
     fprintf(stderr, "Error opening data file: data.txt"); 
     return EXIT_FAILURE; 
    } 
    while (fgets(text_read, MAX_TEXT_LINE_LENGTH, my_file)) 
    { 
     char * p; 
     //---------------------------------------------- 
     // Find the separator. 
     //---------------------------------------------- 
     p = strchr('/'); 

     key_text[0] = '\0'; 
     value_text[0] = '\0'; 

     if (p != 0) 
     { 
      size_t key_length = 0; 
      key_length = p - text_read; 

      // Skip over the separator 
      ++p; 
      strcpy(value_text, p); 

      strncpy(key_text, text_read, key_length); 
      key_text[key_length] = '\0'; 

      fprintf(stdout, 
        "Found, key: \"%s\", value: \"%s\"\n", 
        key_text, 
        value_text); 
     } 
     else 
     { 
      fprintf(stdout, 
        "Invalid formatted text: \"%s\"\n", 
        text_read); 
     } 
    } // End: while fgets 
    fclose(my_file); 

    return EXIT_SUCCESS; 
} 

注:上述代码没有被编译也不测试,但仅是为了说明的目的。

+0

我对C很陌生,所以代码示例真的有帮助。 – 2010-04-14 21:29:21

+0

等等。 – 2010-04-14 23:15:49

+0

谢谢!这非常有帮助! – 2010-04-14 23:18:11