gpt4 book ai didi

c - 读取文本文件C

转载 作者:行者123 更新时间:2023-11-30 17:57:29 26 4
gpt4 key购买 nike

下面的文本文件是我正在处理的标准。

基本上我想记录在处理以下文本文件的过程中涉及多少个时间步骤。

重要的行是第一行,并且各行以“if”开头。'if' 行的处理方式如下: 如果 i < 3 i=i+1 转到 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;
}

最佳答案

在文件中向后移动有多种可能性:

  1. 将文件的所有行存储在一个数组中(这不能很好地扩展!!)
  2. 关闭文件并重新打开它,跳到第 n 行(大量不必要的文件打开和关闭)
  3. 使用 fseek 转到正确的行(在每行的开头记录 ftell 的内容,然后使用 fseek 返回到它们)。这可以更好地扩展。

以下是 fseek 中的一些信息以及 ftell

关于c - 读取文本文件C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com