Поиск последовательности в файле - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую всех, всем доброго времени суток. Возникла проблема в ходе работы с файлами. Расскажу немного о работе программы:

Исходные данные

: 2 текстовых файла;

Что необходимо сделать

: необходимо открыть файл № 1 (состоящий из строк, разделённых "\n"), считать из него некоторую последовательность цифр, затем открыть файл № 2 (состоящий из так же организованных строк) и найти в нём аналогичную последовательность. Всё, казалось бы, шло как по маслу, вот только возникла проблема: на 12 шаге (то бишь когда из файла № 1 считывается 12 строка и фиксируется последовательность цифр) файл № 2 при попытке открытия (при помощи команды: fin2=fopen("file2.txt","r") fin2 получает значение NULL (хотя до этого всегда получала значение подобное "DS:0148" "DS:0158" и т.д.). Не могу дойти до того, почему происходит получение NULL при очередной попытке открытия файла.
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <iomanip.h>
#include <ctype.h>
 
int main()
 
{clrscr();
 
 FILE *fin;         
 FILE *fin2;
 
 const int str_len=47;
 const int id_len=10;
 
 char *id=new char[id_len+1];
 char *idx=new char[id_len+1];
 char *cstr=new char[str_len+1];
 char *cstrx=new char[str_len+1];
 
 int i=0;
 int j=0;
 int x=0;
 int z=0;
 int y=0;
 int q=0;
 
 fin=fopen("PENS.TXT","r"); /*здесь всё описано так же, как ниже, но открытие файла № 1 происходит без проблем*/
 rewind(fin);
 char c='\0';
 
 while((c=fgetc(fin))!=EOF) 
 {
 switch(c)
  {
   case ' ': case ':':
   cstr[y]=c;
   y++;
   i++;
   break;
   case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
   id[x]=c;
   i++;
   x++;
   cstr[y]=c;
   y++;
   if (x==10)
   id[x]='\0';
   break;
   case '\n':   cstr[y]='\0';   x=0;
   int poisk=1;
   j=0;
 
   fin2=fopen("250609.TXT","r"); /*вот тот самый момент, открывающий файл № 2*/
   rewind(fin2);                       
   char s='\0';
    while((s=fgetc(fin2))!=EOF)     
   {
   if (poisk==1)
   {
   switch(s)
    {
    case ' ': case ':':
    cstrx[q]=s;
    q++;
    j++;
    break;
    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
    idx[z]=s;
    j++;
    z++;
    cstrx[q]=s;
    q++;
    if (z==10)
    idx[z]='\0';
    break;
    case '\n':
    cstrx[q]='\0';
    if ((strcmp(id,idx)==0))
     {
     cout<<cstr;
     cout<<endl;
     poisk=0;
     }
    j++;
    z=0;
    q=0;
    break;
    default:
    cstrx[q]=s;
    q++;
    j++;
    break;
    }
   }
   else break;
   }            
   i++;
   y=0;
   break;
   default:
   cstr[y]=c;
   y++;
   i++;
   break;
}
}
 
 getch();           
 return 0;
 
}

Решение задачи: «Поиск последовательности в файле»

textual
Листинг программы
int i = 0;
while(fgets( file_content[i++] , 1023, fib2 ));

Объяснение кода листинга программы

В данном коде:

  1. Объявляется переменная i типа int и инициализируется значением 0.
  2. Запускается цикл while, который будет выполняться до тех пор, пока функция fgets не вернет значение NULL.
  3. Внутри цикла while происходит следующее:
    • В переменную file_content[i] записывается содержимое файла fib2, прочитанное функцией fgets.
    • Значение i увеличивается на 1. Значения переменных и их типы:
    • i - int (целое число), используется для итерации по файлу.
    • file_content[i] - массив символов (строка), используется для хранения прочитанного содержимого файла.
    • fib2 - файловый указатель, используется для чтения содержимого файла.
    • 1023 - константа, определяет максимальное количество символов, которое может быть прочитано за одну операцию.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы