在C编程中,如果文本文件中的某一行有空格或特定字符,如何跳过该行



我是C中字符串和文件操作的新手,我有一个包含以下数据的文本文件file.txt。

我正在阅读一个文本文件,其中包含以下信息

1.#comment
2.Name="Audi"
3.Class="Premium"
4. Cost="High"
5.   #

我想把这个文件的内容存储到一个缓冲区中,条件如下:

  1. 跳过其中包含用于注释的"#"的行
  2. 跳过以空白开始的行

写入缓冲区时。

我使用fgets((逐行读取每一行,检查中是否存在"#">

我的示例代码如下:

char buffer[64];

FILE* fp= fopen("file.txt", "r"); 
if (NULL == fp) {
printf("file can't be opened n");
}
else
{

while (fgets(buffer, sizeof(buffer), fp)) 

{                                                                                                                                   
if(buffer[0]=='#')
{
continue;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   printf("%s", buffer); 
}  
}

如果第1行的第一个字符是#(第1行(,这个代码可以很好地工作,但每当我在第1行中得到#时,我都想跳过这一行,而不仅仅是第一行(文本文件中的第5行需要跳过(。同样,如果第四行有空格,我想跳过这一行。我被困在这里,无法继续前进。有没有一种有效的方法可以做到这一点?请支持

编辑:按照建议,我尝试了isspace&strchr,它正在发挥作用。感谢您的支持。还有一个问题是isspace和strchr是否是misra 2012的投诉?

使用strchr

while (fgets(buffer, sizeof(buffer), fp)) 
{                                                                                                                                   
if(strchr(buffer, '#') != NULL)
{
continue;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
printf("%s", buffer); 
}  
}

如果字符串中没有字符,则返回NULL

假设包含'#'的行不是第一个非空白字母,则保留该行:

如果行以空白开始则跳过

if(isspace(buffer[0])) continue;

如果行以#开头,则跳过

if(buffer[0] == '#') continue;

一起

while (fgets(buffer, sizeof(buffer), fp)) { 
unsigned char first = buffer[0];
if(isspace(first) || (first == '#')) continue;
...
}

否则,按照pm100的建议搜索'#'

最新更新