如何开始在特定位置读取文件

时间:2019-01-09 10:00:06

标签: c file

  

锻炼

     

编写一个程序,该程序将比较两个文本文件,这些文件的名称将作为调用参数。   此比较应逐行进行,在屏幕上打印出那些不同的行   从另一个文件的同一行开始。打印行及其行号和它们的文件名   来自。行号应相对于文件的开头,即第一行应   具有数字1,第二个数字2,依此类推。

我编写了这样的程序,但是我不明白如何从特定的行开始读取该文件

int main(void)
{
   FILE *a = fopen("D:\\lab9.txt");
   FILE *b = fopen("D:\\lab9.1.txt");

   int position = 0, line = 1, error = 0;

   if(a == NULL || b == NULL)
   {
       perror("Error occured while opening file.");
       exit(0);
   }


    char x = getc(a);
    char y = getc(b);

    while(x != EOF && y != EOF)
    {
       position++;

       if(x == '\n' && y == '\n')
       {
           line++;
           pos = 0;
       }


    if(x != y)
    {
        error++
    }
      x = getc(a);
      y = getc(b);

    }

2 个答案:

答案 0 :(得分:1)

一种方法是逐行读取文件并在到达要查找的行时开始实际处理:

您可以使用以下类似内容跳到特定行:

char line[256]; /* or other suitable maximum line size */

while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
    if (count >= lineNumber)
    {
        //process your line in here.
    }
    else
    {
        count++;
    }
}

我认为您无需跳至特定行即可解决该问题。我会亲自解决以下问题:

它是伪装-未测试

    int count = 0;
    char line1[256]; /* or other suitable maximum line size */
    char line2[256]; /* or other suitable maximum line size */

    int read1 =  fgets(line1, sizeof line1, file1);
    int read2 =  fgets(line2, sizeof line2, file2);
    while (read1 != NULL && read2 != NULL)
    {
        if( strcmp ( line1, line2))
        {
          //lines are different. print line number and other info   
        }
        read1 =  fgets(line1, sizeof line1, file1);
        read2 =  fgets(line2, sizeof line2, file2);
    }
    fclose(file);
}

当文件的行数不同时,先前的代码也无法处理。您应该能够扩展自己。

答案 1 :(得分:0)

有三种处理文件内容的方法:

  • 阅读:您总是从文件开头开始。
  • 写入文件(开始新文件):启动新文件时,您会自动从头开始。
  • 追加:从文件末尾开始添加额外的内容。

如您所见,无法从某个行号或基于现有内容开始读取文件。唯一可以做的就是从头开始读取文件并浏览文件,直到获得感兴趣的内容为止。