如何在特定字符串后打印值

时间:2013-01-16 16:18:23

标签: c string

我正在尝试读取文件,找到字符串“myprop”,然后在“myprop”之后将是一个“=”符号,然后是一个数字。我需要打印出这个数字作为字符串,摆脱空格和注释。我能够找到“myprop”字符串然后我相信我应该使用fscanf,但我遇到了麻烦。

const char *get_filename_property()
{
    const char *filename  = "myfile.properties";
    const char *propkey = "myprop";
    char buffer[100], *buffPtr, lastChar, value[50];
    int line_num=1, i=0;

    FILE *fp;
    fp=fopen("myfile.properties", "r");
    if (fp == NULL)
        perror("Error opening file\n\n");

    while(fgets(buffer, 100, fp) != NULL)
    {
        if((strstr(buffer, propkey)) != NULL)
        {
            printf("Myprop found on line: %d\n", line_num);
            printf("\n%s\n", buffer);
        }
        line_num++;
    }
    if (fp)
        fclose(fp);
}  

int main(int argc, char *argv[])
{
    get_filename_property();
    system("pause");
    return(0);
}    

1 个答案:

答案 0 :(得分:1)

您可以在文件中找到sscanf字符串时添加mypop。在while循环中添加以下行:

sscanf(buf,"%*[^=]= %[^\n]",value);

"%*[^=]":这意味着scanf为=加上所有字符并忽略它

" %[^\n]":这意味着您将=之后的所有字符限制在缓冲区字符串的末尾(即使是空格字符)。只有值字符串开头的空格字符才会被加盖

以这种方式添加

while(fgets(buffer, 100, fp) != NULL)
 {
  if((strstr(buffer, propkey)) != NULL)
  {
   printf("Myprop found on line: %d\n", line_num);
   printf("\n%s\n", buffer);
   sscanf(buf,"%*[^=]= %[^\n]",value);
   printf("\nvalue is %s\n", value);
   break;
  }
  line_num++;
 }