Типы данных в языке C++__________________________________699

outfile « i « ' ' « j « ' ' « a « ' ' « s « endl;

// закрытие файла
outfile.close();

// открытие файла как входного потока
ifstream infile("Test.dat");

if(!infile)
{
ShowMessage("Файл не удается открыть");

• return;

}

infile » il » jl » al » si;

// закрытие файла
infile.close () ;

В этом коде создается файл «Test.dat» и в него записываются в текстовом виде
два целых числа i и j, действительное число а и строка s, содержащая одно слово,
после чего манипулятором потока endl (см. раздел 11.7.14 главы 11) осуществля-
ется перевод строки. Причем, запись всех этих данных осуществляется одним опе-
ратором, содержащим сцепленные операции поместить в поток. Если вы сравните
это с аналогичными кодами, приведенными в предыдущих разделах, то убедитесь
в компактности и простоте применения этой операции.

После того, как файл закроется, в нем будет записан текст «I 25 2.5е+07 Ива-
нов». Дальнейшие операторы создают входной поток, связанный с этим файлом и
одним оператором, содержащим сцепленные операции взять из потока читает все
эти данные.

Особенности применения операций « и » детально рассмотрены в главе 11 в
разделе 11.7.14. Отметим только, что возможности операции поместить в поток
можно существенно расширить использованием манипуляторов потока, которые
будут обсуждаться в следующем разделе 12.9.3.2. Помимо этой операции выво-
дить данные в поток можно еще двумя способами: методом put и методом write.

Метод put выводит в поток один символ. Например, оператор

outfile.put('Я') ;

выведет в поток символ «Я». Функции put допускают сцепленный вызов. Напри-
мер, оператор

out file.put('Я').put('\n');

выведет в поток символ «Я» и символ перевода строки.

Метод write выводит в файл из символьного массива, на который указывает
его первый параметр, число символов, указанных вторым параметром. Например,
оператор

out file.write(s,5);

записывает в поток outfile 5 символов из массива s. Причем эти символы никак не
обрабатываются, а просто выводятся в качестве сырых байтов данных. Среди этих
символов, например, может встретиться в любом месте нулевой символ, но он не
будет рассматриваться как признак конца строки.

Аналогичный метод read может затем прочитать эти символы в какой-то дру-
гой символьный массив и тоже без всякой обработки. Функция gcount сообщает о
количестве символов, действительно прочитанных последней операцией ввода.
Теперь остановимся подробнее на вводе данных из файлового потока.
Операция взять из потока (») обладает особенностью, которую надо учиты-
вать при вводе строк в массивы символов. Она читает не всю строку, а только одну
лексему — последовательность символов до первого пробельного или разделитель-
ного символа. Иначе говоря, она читает не строку до символа перевода строки, а
только одно слово. Это удобно, если надо производить анализ текста или искать в