Форматирование текстового файла Применение алгоритма работы с текстовыми файлами больших размеров, страница 5

            }

return si;

}

bool term_here(int k, char* c) // Проверка, что термин уже существует. Существует - true

{if(k>=1)

                        while(k!=0)//Проверка, что термин уже есть

                                               {          if(!(strcmp(a[k].n,c))){return true;};//Если строки совпали

                                                           k--;

                                               }

return false;

}

int work_with_file()  //Обработка файла

{int i,k=0,l=0, ch=0,web=-1, lok=0;int o=0;

bool ind=true;bool ypa=false;

FILE *fp;

            if((fp=fopen("abcd.txt","r"))==0){ printf("ERROR");return 0;}

            while(!(feof(fp)))       //Пока не дошли до конца файла

            {char s[80]="";

            fread(s,80,1,fp);o++;

            lok=80;           //Длина считываемой строки по усмолчанию - 80

ch=ch+prov_mid_abc(s);      //Если влезли в середину трех проблов, посчитать еще один

  абзац

            lok=prov_mid_word(s,lok,fp);//Скорректированная длина считываемой строки

                        for(i=0;i<=lok;i++)

                        {char c[60]="";

                        ypa=false;       // По умолчанию запись разрешена

                        if((s[i]==32)&&(s[i-1]==32)&&(s[i-2]==32)) ch++;//Если встретили три

пробела, значит новый абзац

                                   if((s[i]!=' ')&&(s[i-1]==' '))//Если переход с пробела на "не пробел"

                                   {k=0;//Обнуление счетчика количества букв

                                   ind=true;//По умолчанию слово - термин

                            while ((s[i]!=' ')&&(s[i]!=41)&&(s[i]!=63) //Пока не дойдем до конца слова

                        &&(s[i]!=33)&&(s[i]!=44)&&(s[i]!=46) //(пробела, скобки, знака вопроса,

                                   &&(s[i]!='\0'))           //воскл. знака, запятой, точки или конца строки)

                                               {

                                               c[k]=s[i];//Переписываем в c буквы

                                               i++; // i - счетчик текущей позиции в строке

                                               k++; // k - счетчик количества букв в термине

                                               }

                                   for(l=0;l<k;l++) //Цикл проверки, что слово состоит только из

заглавных букв

                                   {

                                               if(!((c[l]>-129)&&(c[l]<-96))) ind=false;  

                                   }

                                   if(ind==true) {           //Если слово оказалось термином

                                               if(strlen(c)==1) break; //Если это предлог, стоящий в начале

предложения

                                               ypa=term_here(web,c);         //Если этот термин уже есть

                                               if (ypa==true) break;//Запись не производится

                                   web++;

                                   a->extend(web);

                                   a[web].n=strdup(c);

                                   a[web].abc=ch;          //Запись очередной структуры в массив

                                   }

                        }

            }

}

fclose(fp);

return web;

}

void main()

{int web;

if((web=work_with_file())==0)return;//Если файл не открылся, выйти

sort(web);

for(int r=1;r<=web+1;r++)

{

printf("\n%s",a[r-1].n);

printf("   %d",a[r-1].abc);

if (r%24==0 && r!=0){printf("\nPress any key to continue"); getch();}

};

to_file(web);

}