Файлы. Общая концепция организации ввода-вывода данных в С++. Средства класса ios, обеспечивающие точную настройку вывода, страница 21

infile.close();

return 0;  

}

Для выполнения программы установите путь к файлу с информацией (в среде MSC++6.0) в поле Program arguments (Projectà Settings à закладка Debug)

 или в режиме

Программы à стандартные à командная строка    наберите:

путь_к _exe-файлу_программы   путь_к_файлу_с_информацией

7. Ввод-вывод в текстовый файл строк с учетом  при обработке вывода в поток невидимых символов

В данной программе введенные с клавиатуры строки записываются в файл. При вводе символа «$» (в качестве первого символа строки) ввод строк прекращается и файл закрывается. Затем файл открывается для считывания и записанная в нем информация считывается, редактируется (пробел заменяется символом |) и выводится в другой файл.

Вызов функции-члена unsetf с флагом  skipws используется  для учета  невидимых символов (пробелов, в частности) при обработке вывода в поток.

 При выполнении программы имена файлов необходимо задать в командной строке.

#include <fstream.h>

#include <iostream.h>

#include <string.h>

intmain (int argc, char *argv[])

{if (argc!=3) {

                        cout << "Input name of file\n";

                        return 1;

}

ofstreamoutfile (argv[1]);   //открытие файла для вывода

if ( !outfile) {

                        cout << "Input error\n ";

                        return 2;

}

char str[80];

cout << "string?  end - $\n";

while (cout << " ? : ", cin.getline(str, 80), *str != '$'){    //обратите внимание!!!

                                                            outfile << str << endl;

}

cout << "file end\n";

outfile.close();

ifstream infile (argv[1], ios::nocreate);   //открытие файла для ввода

if ( !infile) {

                        cout << "Input error\n ";

                        return 3;

}

ofstreamoutfile_new (argv[2]);   //открытие файла для вывода

if ( !outfile_new) {

                        cout << "Input error\n ";

                        return 4;

}

char ch;

infile.unsetf(ios::skipws);     //вызов функции-члена unsetf  объекта infile                                                 //с флагом skipws приводит к сбрасыванию флага и                                                 // установке режима ввода информации в поток                                                  //с учетом невидимых символов

while (!infile.eof()) {

infile >> ch;                           //посимвольный ввод из файла

if (ch==' ') ch = '|';

if(!infile.eof())   outfile_new << ch;

}

return 0;            //потоки infile и outfile_new закрываются  при завершении программы

}

Обратите внимание, что если цикл while (cout << " ? : ", cin.getline(str, 80), *str != '$') {    

                                                                                       outfile << str << endl;

   }

записать по-другому:

while ( *str != '$') {cin.getline(str, 80);

                              outfile << str << endl;

                               }

то программа будет работать неправильно (в файл будет записываться символ $)

Вид экрана при работе программы:

string?  end - $

 ? :    123  456  789

 ? :      qwer     qwert

 ? :

 ? :    asdfgh  hjk

 ? : 12345

 ? : $

file end

Содержимое файла для редактирования:

   123  456  789

     qwer     qwert

     //строка из 5 пробелов

   asdfgh  hjk

12345

Содержимое отредактированного файла:

|||123||456||789

|||||qwer|||||qwert

|||||

|||asdfgh||hjk

12345

8.  Копирование текстовых файлов

В блокноте создадим текстовый файл с именемd:\\TEST.TXT.

#include <iostream.h>

#include <fstream.h>

#include <ctime>

voidfilecopy (ifstream &, ofstream &);

intmain()

{

ofstreamoutfile (“d:/TEST_NEW.TXT”);   //создается выходной текстовый файл