Поиск последовательности в файле - 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 ));
Объяснение кода листинга программы
В данном коде:
- Объявляется переменная
i
типаint
и инициализируется значением 0. - Запускается цикл
while
, который будет выполняться до тех пор, пока функцияfgets
не вернет значениеNULL
. - Внутри цикла
while
происходит следующее:- В переменную
file_content[i]
записывается содержимое файлаfib2
, прочитанное функциейfgets
. - Значение
i
увеличивается на 1. Значения переменных и их типы: i
-int
(целое число), используется для итерации по файлу.file_content[i]
- массив символов (строка), используется для хранения прочитанного содержимого файла.fib2
- файловый указатель, используется для чтения содержимого файла.- 1023 - константа, определяет максимальное количество символов, которое может быть прочитано за одну операцию.
- В переменную
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д