【发布时间】:2013-01-16 16:18:23
【问题描述】:
我正在尝试读取文件,找到字符串“myprop”,“myprop”之后将是一个“=”符号,然后是一个数字。我需要将那个数字打印为字符串,去掉空格和 cmets。我能够找到“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);
}
【问题讨论】:
-
如果
propkey的某些部分位于第一个加载的缓冲区而其余部分位于第二个加载的缓冲区怎么办?在这种情况下,您在文件中找不到propkey。 -
您是否需要在程序中的任何时候实际使用该值,还是只是将其打印出来?如果您需要做的只是打印它,我不会费心转换它 - 只需找到
=符号(使用strstr()的返回值和"myprop"的已知长度来计算从哪里开始扫描)和直接将其后的字符复制到输出,直到您碰到行尾或空格或另一个不属于该值的字符。如果您需要该值而不是sscanf(),请找到该值的开头并使用适当的strto?()函数进行转换。 -
除了主 CPU 寄存器中的随机值之外,您可能还需要考虑从
get_filename_property()返回一些内容。