2017-08-12 80 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哎呀!感谢您指出。纠正。 –

相关问题