c - 从命令行 C 解析文件名

标签 c regex file parsing command-line

我正在尝试将命令行参数解析到一个 parse.c 文件中,该文件循环遍历所有参数,然后将它们传递到另一个文件中。

我遇到一个问题,如果用户想要搜索特定的文本文件,我不知道是否有任何好的可靠方法来检查参数是否是文本文件。

以下是我到目前为止所做的事情。典型的命令行可能是

./sgrep -i searchstring file.txt

那么有没有办法让我在命令行中 100% 识别文件?

  for (i=0; i<arguments; i++) {
    if (strcmp("-i", args[i])==0) {
      data->case_sensitive = 0; /* set case insensitive */
    } 
    else if((len = strlen(args[i])) > 3 && !strcmp(args[i]+len-4, ".txt")){ 
      data->filename = args[i]; /* store textfile name in filename*/
      } 
    else {
      data->reg_exp = args[i]; /' store searchstring in regexp */
    }
  }

最佳答案

我首先使用lstat确保该文件存在。除此之外,我想说你需要决定你是否更关心误报或漏报。此外,您还需要决定将什么分类为文本文件。您是否关心是否存在一些没有 .txt 扩展名的文本文件?如果你这样做,那就放弃那张支票。您可以打开该文件并扫描非 ASCII 字符。您也可以只查看前 8 个字节左右,寻找非 ASCII 来限制问题。

关于c - 从命令行 C 解析文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343473/

相关文章:

c++ - 使用 CUDA 计算二维像素阵列,声明适当的网格和 block 大小

c# - 如何使正则表达式模式变得懒惰,或者如何在第一次出现时停止匹配?

python - 如何仅按字符串中的第一个特殊字符拆分字符串?

python - 名称错误 : name 'file' is not defined

java - System.out.println 打印字符串,但 System.out.print 不打印

c - 无限循环中的反转整数

c++ - 在 C++ 程序中并行化 C 代码模块

java - 将整数参数从 Java 函数传递给返回垃圾值的 JNI 函数?

java - 删除最后括号中的所有内容

ruby-on-rails - 如何告诉 Gem 文件使用 gem 的特定本地副本