在C中读取文本文件并忽略注释行
我目前正在用C语言制作一台微型计算机,用来完成一项编程任务,但有一部分我还没完成 我一直在思考如何正确地忽略我正在阅读的文本文件中的注释。(下面是文件输入的示例) 每条新行上的第一个输入是一个操作,第二个输入是一个地址。我计划为每个op使用一个switch语句,然后调用相应的函数。这是我在文件中读取的当前布局:在C中读取文本文件并忽略注释行,c,parsing,C,Parsing,我目前正在用C语言制作一台微型计算机,用来完成一项编程任务,但有一部分我还没完成 我一直在思考如何正确地忽略我正在阅读的文本文件中的注释。(下面是文件输入的示例) 每条新行上的第一个输入是一个操作,第二个输入是一个地址。我计划为每个op使用一个switch语句,然后调用相应的函数。这是我在文件中读取的当前布局: //file handling int c; FILE * file; file = fopen(name, "r"); if (file){ printf("Run.\n");
//file handling
int c;
FILE * file;
file = fopen(name, "r");
if (file){
printf("Run.\n");
while ((c = getc(file)) != EOF){
op = c;
switch (op){
case 5:
print("Inside case 5\n");
}
}
fclose(file);
}
如何忽略每行的//并跳到文件中的下一行?使用
fgets
和strtok
可以逐行读取,并根据/
分隔符拆分字符串。下面是一个示例(虽然没有完全检查,但这是主要思想):
编辑:我刚刚意识到这并不是你想要的。但是,您仍然可以使用它,以便首先忽略注释,然后将给定字符串拆分为操作和地址,或者其他任何内容…调用fgets以获得完整的行:
fgets(buffer, 100, file);
然后从行中提取两个数字:
sscanf(buffer, "%d%d", &instruction, &address);
如何正确忽略我正在阅读的文本文件中的注释如何忽略每行的//并跳到文件中的下一行 使用
fgets()
使用strstr()
查找/
,并在该点处剪掉字符串
char *slash_slash = strstr(buf, "//");
if (slash_slash) {
*slash_slash = '\0';
}
根据需要继续处理该行
...
}
c=getc(文件)
不会做你想做的事。调用strtol
(但这需要实际的C字符串才能通过)或将case 5:
更改为case“5”:
-但这对两位数字不起作用。我的猜测是,您必须对每一行进行多次读取。首先,你阅读操作。其次,您将读取一个空格(忽略),后跟一个地址。最后,您将读取(可能在循环中)一组空格和其他将被忽略的不相关字符,查找\n
(换行符)。一旦找到换行符,就可以在下一行重新开始这个过程。请注意,整个过程非常依赖于保持相同结构的文件。一种方法是使用fgets
读取整行,然后调用strstr
查找/
,如果找到它,则用'\0'
覆盖第一个字符(即修改输入行缓冲区)在继续之前截断字符串。strtok(buf,“/”代码>将像strtok(buf,“/”)一样执行代码>
char buf[80];
if (fgets(buf, sizeof buf, file)) {
char *slash_slash = strstr(buf, "//");
if (slash_slash) {
*slash_slash = '\0';
}
...
}