2010-04-14 30 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