Синтаксический анализ текстового файла в C - вызов пакетного файла или нет - PullRequest
1 голос
/ 23 декабря 2010

Этот сайт является огромным источником знаний, он помог мне бесчисленное количество раз в прошлом.

Я только начал изучать C самостоятельно - до сих пор я только написал несколько командных файлов.

Поэтому я смиренно прошу вашей помощи - я хотел бы получить некоторые рекомендации о том, как написать программу на C, которая бы:

  • 1) Откройте текстовый файл, содержащий следующее

"batch1.cmd" "argument1" "1"

"batch2.cmd" "argument2" "0"

"batch3.cmd" "argument3" "1"

  • 2) Разобрать его, чтобы найти «0» или «1»

    Если "1" вызывает, он указывает пакетный файл с его аргументом

    Если «0» перейти на следующую строку - я буду обновлять текстовый файл на регулярной основе, поэтому мне просто нужно будет изменить 1 или 0 и не переписывать все эти строки.

Я уже нашел много помощи в разборе C в интернете, но нет учебника о том, как этого добиться. Я знаю, что это может показаться очень легким и что я должен выглядеть как кто-то очень ленивый, но я уверяю вас, я был на этом в течение трех дней, но безуспешно.

Я не обязательно прошу полный сценарий, просто ответ типа «посмотрите на следующую функцию, ее правильный синтаксис - йадда йадда» и т. Д.

Думаю, мне придется использовать

int Search_in_File(char *fname, char *str)

{ FILE *fp;

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

и

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

но я как-то не могу "соединить точки".

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Взгляните на http://en.wikipedia.org/wiki/C_file_input/output - вы очень близки. После того, как вы открыли файл, вам нужно прочитать строки или символы из файла и, основываясь на том, что вы найдете, выполнить команду system.

Эта вики-страница покажет вам, как это сделать - у нее также есть некоторый удобный пример кода:)

0 голосов
/ 23 декабря 2010
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 ...
}
...