как начать читать файл с определенной позиции - PullRequest
0 голосов
/ 09 января 2019

Упражнение

Напишите программу, которая будет сравнивать два текстовых файла, имена которых будут заданы в качестве аргументов вызова. Это сравнение следует проводить построчно, распечатывая на экране те строки, которые отличаются из той же строки в другом файле. Выведите строки с номерами строк и именами файла, который они родом из. Номера строк должны быть относительно начала файла, то есть первая строка должна иметь номер 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 голосов
/ 09 января 2019

Подход заключается в чтении файла строка за строкой и начале фактической обработки, когда вы достигнете строки, которую вы ищете:

Вы можете использовать что-то вроде следующего, чтобы перейти к определенной строке:

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++;
    }
}

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

ЭТО PSEUDO-C - НЕ ПРОВЕРЕНО

    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);
}

Предыдущий код также не обрабатывается, когда файлы имеют разное количество строк. Вы должны быть в состоянии расширить себя.

0 голосов
/ 09 января 2019

Существует три способа обработки содержимого файла:

  • Прочтите: вы всегда начинаете с начала файла.
  • Запишите его (начиная с нового файла): когда вы начинаете новый файл, вы автоматически начинаете с начала.
  • Добавить: вы добавляете дополнительный контент, начиная с конца файла.

Как видите, невозможно начать чтение файла с определенного номера строки или на основе существующего содержимого. Единственное, что вы можете сделать, это начать читать файл с самого начала и просматривать его до тех пор, пока не найдете интересующий вас фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...