2013-06-12 35 views
0

我想讀從C.如文件中的文件中的行我有以下數據文件從一個特定字符用C讀取到另一個

"It was a good 

day 

but suddenly 
everything" 

RightNow公司,我的代碼只是逐行地讀取,但如前所述在上面的例子中,我想從開始的引號(「)開始讀取數據,直到結尾的引號(」),然後將整個字符串(例如「這是一個美好的一天,但突然變成了一切)」寫入另一個文件。我只需要幫助閱讀上面這些從開始引號到結束引號的內容。請指導我使用C中的哪些函數來幫助我做到這一點。

RightNow公司,我只是通過線

FILE *file = fopen (filename, "r"); 

if (file != NULL) 
    { 
    char line [1000]; 
    while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ 
    { 
    //do something 
    } 
    } 
+2

什麼是'倒逗號'? –

+0

@CarlNorum:雙引號的英語口語。 – 2013-06-12 18:39:20

回答

3
#include <stdio.h> 

char *read_quoted_string(char outbuff[], FILE *fp){ 
    int ch, i; 
    while(EOF!=(ch=fgetc(fp))) 
     if(ch == '"') break; 

    for(i=0;EOF!=(ch=fgetc(fp));++i){ 
     if(ch == '"') break; 
     outbuff[i] = ch; 
    } 
    outbuff[i]='\0'; 
    return outbuff; 
} 

int main(void){ 
    FILE *file = fopen("data.txt", "r"); 

    if (file != NULL){ 
     char buff [1000]; 
     printf("%s", read_quoted_string(buff, file)); 

     fclose(file); 
    } 
    return 0; 
} 

而且重複

if (file != NULL){ 
     int i=1;//sequence number 
     char buff [1000]; 
     while(*read_quoted_string(buff, file)){//empty is "" (*"" == '\0') 
      printf("%2d:%s\n", i++, buff); 
     } 
     fclose(file); 
    } 
+0

@Zara這裏是怎麼樣在codez – A4L

+0

空間字符應該減少? – BLUEPIXY

+0

@BLUEPIXY這段代碼適用於雙引號下的一條語句,但我在我的文件中有很多這樣的語句,我想閱讀。如何擴展此代碼來實現這一點。我是否需要添加一個while循環來逐行讀取文件? – Xara

2

您可能需要使用fgetc一次讀取一個字符:

  • 分配緩衝區足夠大
  • 開始從讀文件char by char
  • 如果您發現"開始下一個字符保存到緩衝區
  • 請保存到緩衝區中,直到你到達的其他"
  • 終止您字符串以'\0'
  • 如果您需要刪除新的生產線,並有兩個"在之間的所有字符相同的行然後只是不保存'\r''\r'並保存一個簡單的空間' '而不是。
  • 重複上述操作,直至消耗完井文件,即fgetc返回EOF
1

您可以使用下面的代碼來做到這一點:

#include <stdio.h> 

void copyToAnother(FILE *inFile, FILE *outFile) 
{ 
    int ch, flag = 0; 
    while(EOF!=(ch=fgetc(inFile))) 
    { 
     if(ch != '"' && toggle) 
     { 
      fputc(ch,outFile); 
     } 
     else 
     { 
      toggle = toggle^1; 
     } 
} 

int main(void) 
{ 
    FILE *inFile = fopen("in.txt", "r"); 
    FILE *outFile = fopen("out.txt", "w"); 

    if (inFile != NULL && outFile != NULL) 
    { 
     copyToAnother(inFile, outFile); 
     fclose(inFile); 
     fclose(outFile); 
    } 
    return 0; 
} 

注意:在這段代碼。它會寫入所有「」之間的所有數據。

相關問題