2016-11-30 55 views
0

我正在嘗試讀取行並從中提取信息。我的文字有例如;從文件中保存變量?

abate terminar, hacer cesar 
abated amainado, amplacado, mitigado 

這是一本字典。 首字是英文,其餘是西班牙文。我試圖將英語單詞保存到一個變量中,然後將其餘的行保存到另一個變量中。我不知道該怎麼做?我編寫了讀取所有文本文件的代碼並將其全部打印出來。

int main(int argc, const char * argv[]) { 

    char filename[] = "/Users/MyName/Desktop/span.rtf"; 
    FILE *file = fopen (filename, "r"); 

    if (file != NULL) { 
     char line [1000]; 
     while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ { 
       fprintf(stdout,"%s",line);  } 

     fclose(file); 
    } 

    return 0; 
} 
+0

閱讀有關你的C教科書字符串。 –

+0

使用[getline](https://www.gnu.org/software/libc/manual/html_node/Line-Input.html)功能。 –

回答

1

這是一個很好的開始,使用fgets()整體線條然後可以解析讀的是一般的好辦法。

接下來你需要考慮如何存儲你的字典。一種方法可能是靜態大小的結構陣列:

struct { 
char *english; 
char *spanish; 
} words[1000]; 

這假設不超過1000個單詞。

要存儲的每一行,只要找到第一個空格字符,並讓這成爲英語和西班牙語之間的分裂:

size_t word_count = 0; 
while(fgets(line, sizeof line, file) != NULL) 
{ 
    char * const sp = strchr(line, ' '); 
    if(sp != NULL) 
    { 
    *sp = '\0'; 
    while(isspace((unsigned char) *++sp)) 
     ; 
    if(isalpha((unsigned char) *sp) 
    { 
     words[word_count].english = strdup(line); 
     words[word_count++].spanish = strdup(sp); 
    } 
    } 
} 

類似的東西應該讓你開始。這假設存在strdup(),如果你沒有重新實施它是微不足道的。當然,你應該添加代碼來檢查內存分配失敗。

0

試試這個:

char english[256]; 
char spanish[256]; 

while(fscanf(file,"%[a-z]%*[ ]%[a-z, ]\n", english, spanish) != 0) { 
    fprintf(stdout, "English: %s\n Spanish: %s\n", english, spanish); 
}