读取更改但行结构已知的文件行

时间:2011-05-15 14:15:45

标签: c file int line

我有一个逐行组织的文件,所有行的结构都由我定义,但每行的内容可以根据同一行包含的两个变量增加或减少。

行示例: 1 Andre 2 0 5 13 05 2011 4 13 05 2011

'1'表示用户ID

'Andre'代表与ID相关联的名称

'2 0'细分:'2'表示用户拍摄的电影数量,'0'表示用户预约的电影数量。

到目前为止,该行遵循模式%d%s%d%d,它们可以存储在我想要的变量中。

现在困难的部分来了。根据'2 0'部分,该程序知道必须读取模式%d%d%d%d('5 13 05 2011'和'4 13 05 2011' - 表示拍摄的电影的日期)2次并且该程序知道在读取前一个模式2次之后,它知道由于'2 0'中的零部分,我不需要读取任何其他内容。

包含更多数据的行示例: 1 Andre 2 1 5 13 05 2011 4 13 05 2011 7 14 05 2011

'2 1'

'2'部分告诉程序在该行中它应该读作'5 13 05 2011'和'4 13 05 2011'到variable_one [i] [4](例子)

'1'部分告诉程序在该行中它应该读'7 14 05 2011'到variable_two [i] [4](例子)

我正在使用fscanf(file, "%d %s %d %d", &id[i],&nomes[i],&livros_num[i][0],&livros_num[i][1]);来阅读'1 Andre 2 0',但我如何根据'2 0'阅读其余部分?

5 个答案:

答案 0 :(得分:1)

您可以使用fscanf。 这是一个例子:

int int1;
char char_buf[BUF_SIZE];
fscanf ( file_stream, "%d%s", &int1, char_buf);

答案 1 :(得分:0)

第一次调用fscanf后,需要根据读取的变量进行循环。您似乎已经意识到您在第一次调用中读到的int确定了行中所需的额外读取次数。

int i;
for ( i=0; i< livros_num[i][0]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}

// same procedure for second number
for ( i=0; i< livros_num[i][1]; i++ ) {
    int something, day, month, year; // 'something' is unclear to me in your code
    fscanf( file, "%d %d %d %d", &something, &day, &month, &year );
    // store these variables wherever
}
fscanf( file, "%s\n" ); // I'm NOT sure if this is nessecary, to move the file to the next line

答案 2 :(得分:0)

fgets(buf,sizeof(buf),f)

p = strtok (buf," ");
p1 = strtok (0," ");
p2 = strtok (0," "); 

p3 = strtok (0," "); 

n1 = atoi(p1);
n2=  atoi(p2);

i=0;
while(n1--)
{
  sscanf(p3,"%d %d %d %d", &v1[i],&v2[i],&v3[i],&v4[i] );
  strok(0," ");
  strok(0," ");
  strok(0," ");
  p3 =   strok(0," ");
  i++;

}

i=0;
while(n2--)
{
  sscanf(p3,"%d %d %d %d", &v2[i],&v2[i],&v2[i],&v2[i] );
  strok(0," ");
  strok(0," ");
  strok(0," ");
  p3 =   strok(0," ");
  i++;

}

答案 3 :(得分:0)

怎么样

int j;
fscanf(file, "%d %s %d %d", &id[i],&nomes[i],&livros_num[i][0],&livros_num[i][1]);
for (j=0;j<livros_num[i][0];++j)
{
    fscanf(file,"%d %d %d %d",&variable_one[0],&variable_one[1],&variable_one[2],&variable_one[3]);
}

答案 4 :(得分:0)

好吧,当你读到'2 0'时,你会得到两条信息:你需要循环播放电影日期的次数以及你需要循环读取所有预约的次数。

int i;
int num_movies_taken, num_movies_reserved;

// read all the dates of the movies taken home
num_movies_taken = livros_num[i][0];
for (i = 0; i < num_movies_taken; i++)
{
    fscanf("%d %d %d %d", ...);
}

// read all the reservations
num_movies_reserved = livros_num[i][1];
for (i = 0; i < num_movies_reserved; i++)
{
    fscanf("%d %d %d %d", ...);
}