Глава 1 (продолжение 1)
Задача:
Нередко бывает надо найти в текстовом файле слово, и поставить перед ним фрагмент нового текста.
В данной программе везде перед словом // Listing будет впечатан фрагмент текста из текстового файла fileFrom1.txt. Исходный файл - fileFrom.txt. Результат будет помещен в файл fileTo.txt
Слово // Listing задано программным способом. Содержимое текстовых файлов можно изменять произвольно.
Программа нуждается в тестировании! Более удачная программа на эту тему во второй главе.
Программа 01_03
// Example_01_02 Вставка текстового фрагмента
#include <fstream>
#include <string>
#include <iostream>
#include "copy01.h"
//using namespace std;
int main( int argc,char* argv[])
{
const int len = 1024;
char buf[len];
char slovo[] = "// Listing";
char slovo2[] = " ";
int l_word = strlen(slovo);
int l_word2 = strlen(slovo2);
char fileTo[100] ="fileTo.txt";
char fileFrom[100] ="fileFrom1.txt";
ifstream from1("fileFrom.txt");//открываем файл для считывания
if(!from1)
{
cout<<"Vhodnoi fail ne naiden:" ;
return (1);
}
ifstream from("fileFrom1.txt");//открываем файл для считывания
if(!from)
{
cout<<"Vhodnoi fail ne naiden:" ;
return (1);
}
ofstream to1("fileTo.txt",ios::app);//открываем файл для записи
if(!to1)
{
cout<<"Vyhodnoi fail ne otkryt:" ;
return (1);
}
while (!from1.eof())
{
from1.getline(buf,sizeof(buf));//считываем построчно в массив buf
char *p = buf;
while (p = strstr(p, slovo)){
copy01(fileFrom, fileTo);
p +=l_word;
}
//теперь выведем из массива buf в файл
to1<<buf<<endl;
} //end while
to1.close();
from1.close();
return 0;
}
Анализ:
В этой программе считывание из потока осуществляется в цикле построчно в символьный массив
buf:
while (!from1.eof())
{
char *p = buf;
Сразу после считывания строки устанавливаем на ее начало указатель p.
Далее при помощи функции strstr() определяем входит ли заданное слово в считанную строку.
Если входит, то strstr() возвращает позицию вхождения, именно перед этой позицией нам надо вставить фрагмент текста, считайнный из файла from. Это делает функция copy01.
while (p = strstr(p, slovo)){
p +=l_word;