【问题标题】:Text File Parsing in C - Calling a Batch File Or NotC中的文本文件解析 - 是否调用批处理文件
【发布时间】:2010-12-23 11:19:20
【问题描述】:

这个网站是一个巨大的知识来源,它在过去帮助了我无数次。

我刚开始自学C - 到目前为止,我只写了几个批处理文件。

因此,我谦虚地请求您的帮助 - 我想要一些关于如何编写 C 程序的指导:

  • 1) 打开一个包含以下内容的文本文件

"batch1.cmd" "argument1" "1"

"batch2.cmd" "argument2" "0"

"batch3.cmd" "argument3" "1"

  • 2) 解析它以找到“0”或“1”

    如果“1”调用他指定的批处理文件及其参数

    如果 "0" 进入下一行 - 我会定期更新文本文件,所以我只需要更改 1 或 0 而不会重写所有这些行。

我已经在互联网上找到了很多关于 C 解析的帮助,但没有关于如何实现的教程。 我知道这似乎很容易,而且我必须表现得非常懒惰,但我向你保证,我已经做了三天了,但没有任何成功。

我不一定要一个完整的脚本,只是一个答案,比如“看看下面的函数,它的正确语法是 yadda yadda”等等。

我想我必须使用

int Search_in_File(char *fname, char *str)

{ FILE *fp;

fp=fopen("c:\\batchlist.txt", "r");

system("c:\\batch1.cmd argument1");

但我无法“连接点”。

提前致谢!

【问题讨论】:

  • 您已打开文件。接下来(在检查fopen 是否成功之后)是读取它。考虑freadfgets,决定你喜欢哪个来完成这项任务。
  • 对于这个任务,特别是考虑到它是一个文本文件, fgets() 可能最适合你。完成后不要忘记 fclose() 文件!
  • 将文件本身设为批处理文件并用" "(4 个空格)或"rem " 覆盖行的前4 个字符以启用/禁用一个不是更简单吗?行吗?
  • @David:你必须使用 C 吗?这是我很想写成批处理文件本身的东西。
  • 如果不是为了作业,我建议将 0/1 标志移动到每一行的第一个参数。这将使解析变得更加容易。

标签: c parsing batch-file arguments


【解决方案1】:

看看http://en.wikipedia.org/wiki/C_file_input/output - 你非常接近。打开文件后,需要从文件中读取行或字符,并根据找到的内容执行system 命令。

该 wiki 页面将向您展示如何操作 - 它也有一些方便的示例代码 :)

【讨论】:

  • 您好,抱歉回复晚了,我遇到了网络问题。非常感谢您的意见,我想我已经很接近了。我需要找到“if”“else goto next line”等的正确语法,但我能感觉到我在那里!再次感谢!
【解决方案2】:
int Search_in_File(char *fname, char *str)

{ FILE *fp;
char line[100],a[100],b[100],c[100];
fp=fopen("c:\\batchlist.txt", "r");
if( !fp ) ... errorhandling here ...
while( fgets(line,100,fp) )
{
  if( strchr(line,'\n') ) *strchr(line,'\n')=0;
  if( 3==sscanf(line,"%s%s%s",a,b,c) && !strcmp(c,"1") ) /* "%s" breaks at whitespaces, attention for whitespaces in your strings here! */
  {
    sprintf(line,"%s %s",a,b);
    system(line);
  }
}
...
fclose and so on ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多