以下のテキスト ファイルは、私が扱っている標準です。
基本的に、以下のテキスト ファイルの処理中に含まれるタイム ステップの数を記録したいと考えています。
重要な行は最初の行で、行は「if」で始まります。「if」行は次のように処理されます: if i < 3 i=i+1 goto 8 i が 0 で初期化されていると想定しています。
これは、i が 3 未満である限り、コントロールが 8 行目にジャンプする必要があることを意味します。
10
1fi
if i < 3 i=i+1 goto 8
3sdkfj
4ksdkk
5kdkfk
6kdkjf
7dkjkfd
if k < 2 k=k+1 goto 2
9dkkf
10dku
if j < 2 j=j+1 goto 2
私の質問は、fopen を使用してテキスト ファイルを開き、fgets を使用して行を収集することです... fgets を使用して、fgets によって既に処理された行に戻るにはどうすればよいですか。つまり、上記のテキスト ファイルで if ステートメントが示唆することを実行して戻る2行目まで。テキストファイルを再度開いて何もせずに...
これまでの私のコードは、次のような in.file 内の特定のテキスト ファイルの最初の行と行数を収集するために機能します。
./JobA.txt
./JobB.txt
./JobC.txt
./JobD.txt
私のコード:
    #include <errno.h>
    #include <limits.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <ctype.h>
    #include "projscheduler.h"
    /* I/O Files */
    //static char *inputFile;
    char * in;
    static FILE *input;
    static FILE *cur;
    /*Scheduled jobs indexed by PID*/
    struct job list[20];
    /* the next job to schedule */
    //static struct job *job_next = NULL;
    /* Time */
    time 
clock;
/*Initialises job list*/
static void initialise_list(void) {
    for(int i = 0; i < sizeof(list)/sizeof(list[0]); i++) {
        list[i].parameters.pid = -1;
    }
}
/*Order Jobs*/
/*=static void order_jobs(void)
{
    for(int i=0; i < sizeof(list)/sizeof(list[0]); i++)
    {
}
*/
/** Read and parse input from input file */
static void parse_input(void) 
{
    char    buffer[BUFSIZ];
    char    lines[BUFSIZ];
    int jobs = 0;
    struct  job *current;
    initialise_list();
    while( fgets(buffer, sizeof(buffer), input) )   
    {
        time start;
        char buf[BUFSIZ];
        sscanf(buffer,"./%s/", buf);
        cur = fopen(buf, "r" );
        int steps = 0;
        while( fgets(lines, sizeof(lines), cur) )
        {
            if( steps == 0 )
            {
                current = &list[jobs];
                strcpy(current->job_id, buf);
                sscanf(lines,"%ld", &start);
                current->parameters.start = start;              
            }
            steps++;
        } 
        current->parameters.scheduled = steps;
        jobs++;
        fclose(cur);
    } 
    for (int i = 0; i < jobs; i++)
    {
        printf("%s %ld  %ld\n", list[i].job_id, list[i].parameters.start, list[i].parameters.scheduled);
    }   
}   
int main(int argc, char **argv) 
{
    in = argv[1];
    if ( (input = fopen(in, "r")) == NULL ) {
        fprintf(stderr, "cannot open %s\n", argv[1]);
    }
    parse_input();
    fclose(input);
    return EXIT_SUCCESS;
}