Назад | Начало урока | Вперед
Содержание

Глава 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()) {

from1.getline(buf,sizeof(buf));//считываем построчно в массив buf

char *p = buf;

Сразу после считывания строки устанавливаем на ее начало указатель p.

Далее при помощи функции strstr() определяем входит ли заданное слово в считанную строку. Если входит, то strstr() возвращает позицию вхождения, именно перед этой позицией нам надо вставить фрагмент текста, считайнный из файла from. Это делает функция copy01.

while (p = strstr(p, slovo)){

copy01(fileFrom, fileTo);
p +=l_word;
}

Назад | Начало урока | Вперед
Содержание

Hosted by uCoz