2017-08-12 77 views
0

我已經閱讀了所需文件中的所有文本,現在它存儲在buff中。我想複製標識符字符串(如「標題」)後的字符串內容。從C中的文本文件複製所需的字符串

示例如下文件:

"Title: I$_D$-V$_{DS}$ Characteristic Curves (Device 1) 
MDate: 2016-03-01 
XLabel: Drain voltage V$_{DS}$ 
YLabel: Drain current I$_D$ 
CLabel: V$_{GS}$ 
XUnit: V 
... " 

for(;;) { 
    size_t n = fread(buff, 1 , DATAHOLD, inFile); 

    subString = strstr(buff, "Title"); 

     if(subString != NULL) { 
      strcpy(graph1.title , (subString + 7)); 
      subString = NULL; 
     } 

     ....more if statements.... 

     if(n < DATAHOLD) { 
      break; 
     } 
} 

我明白strstr()返回一個指針到搜索字符串的位置,我加7得到公正的搜索字符串後附帶的文字和這部分工作正常。問題是strcpy()buff字符數組的其餘部分複製到graph1.title。 如何指示strcpy()只複製與substring指針相同的行上的文本?使用strtok()也許?

回答

1

一次只讀取一行。

for(; fgets(line,...);) { 
    do stuff on line 
} 
1

你可以使用另一個strstr獲得行結束的位置,然後用strncpy這就好比strcpy,但接受第三個參數,在數字符的複製的輸入。

2

我同意ChuckCottrill,如果您一次讀取並處理一行文字會更好。

此外,由於您正在處理的文件是一個文本文件,您可以在文本模式下打開它。

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

閱讀與fgets()行成一個字符串str。應該注意的是,fgets()將採取尾隨\n'str

fgets(str, sizeof(str), fin); 

char *substring; 
if((substring = strstr(str, "Title: ")) != NULL) 
{ 
    strcpy(graph1.title, substring+strlen("Title: ")); 
} 

在這一點上,graph1.title將在它I$_D$-V$_{DS}$ Characteristic Curves (Device 1)

+0

fgets應該切換第一個和最後一個參數。我喜歡這個主意,我會嘗試一下 – pproctor

+0

@pproctor哎呀!感謝您指出。糾正。 –

相關問題