/*

		 Студент
Московского Государственного Технического
    Университета Гражданской Авиации

    Виталий Дмитриевич Новичков.

Факультет Прикладной Математики и Вычислительной Техники

Специальность 230101
"Вычислительные Машины, Комплексные Системы и Сети"

*/

#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <iomanip.h>
#include <stdlib.h>
#include <dos.h>
#include <malloc.h>
#include <stdio.h>
#include "sndmsgs.c"
#include "prnbrdr.c"


ifstream fin, work;
ofstream fout, log;
fstream io;
char *name[]={"input.txt", "work.log", "log.txt"};
char *subline="универ";
int counter;
char buf[10000];

void DoReadFile()
{
char c;
fin.seekg(0);
log << "  >>  Посимвольное чтение исходного файла в протокол  <<\n\n";
log << "============================================================\n";
while(fin.peek()!=EOF)
	{
	fin.get(c);
	log.put(c);
	}
log << "\n============================================================\n\n\n";
}



void TheSubline()
{
log << "  >>  Поиск подстроки в исходном файле  <<\n\n";
printf("\n\nПожалуйста, введите подстроку: ");
cin >> subline;
fout << "   -Введена строка \"" << subline << "\"\n";
printf("\nСпасибо!\n\n");

fin.seekg(0);
counter=0;

while(fin.peek()!=EOF)
{
fin >> buf;
if (strstr(buf, subline)!=NULL)
	{
	//cout << buf << endl;
	counter++;
	}
if(counter==1)
{
fout << "    В исходном файле найдены слова:\n";
fout << "          слово                    позиция в файле\n"<<
"     _______________________________________________________\n";
}

if (strstr(buf, subline)!=NULL)
	{
	fout << "       * "<< setiosflags(ios::left) << setw(25) << buf << "  " << fin.tellg() << endl;
	counter++;
	}
//cout << endl << fin.peek();
}

if (counter)
{
fout << "\n   ____Найдено слов с подстрокой \"" << subline <<"\": "<<counter<<endl;
}
else
{
fout << "\n   ____Слова с указанной подстрокой не найдены!\n";
}

}


void LineOut_()
{
fout.close();
fin.close();

char c;
work.open(name[1]);
if(!work)
	{
	prnborder("Ошибка открытия файла INPUT.TXT", 4);
	ErrSnd();
	getch();
	}

int i;
work.seekg(0);
char s[256];
while(work.peek()!=EOF)
	{
	work.getline(s, 256);
	log << s << endl;
	}
}

void OpenFiles()
{
fin.open(name[0]);
if(!fin)
	{
	prnborder("Ошибка открытия файла INPUT.TXT", 4);
	ErrSnd();
	getch();
	}

fout.open(name[1]);
if(!log)
	{
	prnborder("Ошибка открытия файла WORK.LOG", 4);
	ErrSnd();
	getch();
	}


log.open(name[2]);
if(!log)
	{
	prnborder("Ошибка открытия файла LOG.TXT", 4);
	ErrSnd();
	getch();
	}

}


void main()
{
OpenFiles();
DoReadFile();
TheSubline();
LineOut_();
getch();

fin.close();
fout.close();
log.close();
work.close();
}