Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy.docx
Скачиваний:
4
Добавлен:
15.04.2019
Размер:
75.36 Кб
Скачать

37.Управление выводом. Манипуляторы и флажки.

Функции управления выводом позволяют определять, когда вывод будет отправлен из скрипта. Это можно использовать в различных ситуациях, особенно если вам нужно выслать шапки/headers браузеру, после того как ваш скрипт начал выводить данные. Функции управления выводом не влияют на шапки, высылаемые функциями header() или setcookie(), только на такие функции, как echo(), и на данные между блоками PHP-кода.Пример 1. Управление выводом<?php

В приведённом примере вывод из echo() будет сохранён в буфере вывода, пока ob_end_flush() не будет вызвана. Тем временем вызов setcookie() успешно сохранил cookie без возникновения ошибки. (Вы не можете нормально отправить шапки/headers браузеру, после того как данные уже были отправлены.)

Содержание

flush - очищает буфер вывода; ob_clean - очищает (удаляет) буфер вывода; ob_end_clean - очищает (удаляет) буфер вывода и выключает буферизацию вывода; ob_end_flush - очищает (отправляет) буфер вывода и включает буферизацию вывода; ob_flush - очищает (отправляет) буфер вывода

ob_get_contents - возвращает содержимое буфера вывода

ob_get_length - возвращает длину буфера вывода; ob_get_level - возвращает содержащий/nesting уровень механизма буферизации вывода; ob_gzhandler - ob_start callback-функцию для буфера вывода gzip

ob_implicit_flush - включает/выключает неявную очистку; ob_start - включает буферизацию вывода

Манипуляторами наз-ся функции, которые можно включать в цепочку операций помещения и извлечения для форматирования данных. Манипуляторы деляться на простые, не требующие указания аргументов, и параметризованные:

endl-перевод строки; flush-выгружает содержимое буфера в поток; dec-меняет формат вывода числа на десятичный; oct-меняет формат вывода числа на восьмеричный; hex-меняет формат вывода числа на шестнадцатеричный; ws-извлекает и удаляет символы пустых промежутков из потока; showpos-показывает + перед неотрицательными числами; showpoint-показывает десятичную точку; noshowpoint-скрывает десятичную точку

Флаги представляют собой отдельные биты, объединенные в поле x_flags типа long класса ios.Примеры:

skipws –при извлечениипробельные символы игнорируються, left – выравнивание по левому краю, dec- десятичная система счисления, oct- восмиричная система счисления, fixed- печатать вещественные числа с фиксированной точной.Для управления флагами в классе есть методы flags, setf и unsetf. Перед установкой флагов требуеться сбросить флаги, которые не могут быть установлены одновременно с ними.

38. Файловые потоки.

Потоки для работы с файлами создаются как объекты следующих классов:

ofstream - запись в файл; ifstream - чтение из файла; fstream - чтение/запись.

Для создания потоков имеются следующие конструкторы:

fstream();создает поток, не присоединяя его ни к какому файлу.

fstream(constchar *name, int mode, int p = filebuf::openprot);создает поток, присоединяет его к файлу с именем name, предварительно открыв файл, устанавливает для него режим mode и уровень защиты p. Если файл не существует, то он создается. Для mode = ios::out, если файл существует, то его размер будет усечен до нуля. Флаги режима определены в классе ios и имеют следующие значения:

in - для чтения out - для записи

Если при создании потока он не присоединен к файлу, то присоединить существующий поток к файлу можно функцией void open(const char *name, int mode, int p = filebuf::openprot);

Функция void fstream base::close(); сбрасывает буфер потока, отсоединяет поток от файла и закрывает файл. Эту функцию необходимо явно вызвать при изменении режима работы с потоком. Автоматически она вызывается только при завершении программы.

Таким образом, создать поток и связать его с файлом можно тремя способами:

  1. Создается объект filebuf filebuf fbuf;

Объект filebuf связывается с устройством (файлом) fbuf.open("имя", ios::in);

Создается поток и связывается с filebuf istream stream(&fbuf);

  1. Создается объект fstream (ifstream, ofstream) fstream stream;

Открывается файл, который связывается через filebuf с потоком stream.open("имя", ios::in);

  1. Создается объект fstream, одновременно открывается файл, который связывается с потоком fstream stream("имя", ios::in).

ОПРЕДЕЛЕНИЕ КОНЦА ФАЙЛА

Обычной файловой операцией в программах является чтение содержимого файла, пока не встретится конец файла. Чтобы определить конец файла, ваши программы могут использовать функцию еоf потокового объекта. Эта функция возвращает значение 0, если конец файла еще не встретился, и 1, если встретился конец файла. Используя цикл while, программы могут непрерывно читать содержимое файла, пока не найдут конец файла, как показано ниже:

while (! input_file.eof()){// Операторы}

ПРОВЕРКА ОШИБОК ПРИ ВЫПОЛНЕНИИ ФАЙЛОВЫХ ОПЕРАЦИЙ

Если ваша программа пишет данные в файл, вам необходимо убедиться, что операция прошла успешно (к примеру, отсутствие места на диске, скорее всего, помешает записи данных). Чтобы помочь программам следить за ошибками, вы можете использовать функцию fail файлового объекта. Если в процессе файловой операции ошибок не было, функция возвратит ложь (0). Однако, если встретилась ошибка, функция fail возвратит истину. Например, если программа открывает файл, ей следует использовать функцию fail, чтобы определить, произошла ли ошибка, как это показано ниже:

ЗАКРЫТИЕ ФАЙЛА, ЕСЛИ ОН БОЛЬШЕ НЕ НУЖЕН

При завершении программы операционная система закроет открытые ею файлы. Однако, как правило, если программе файл больше не нужен, она должна его закрыть. Для закрытия файла программа должна использовать функцию close:

input_file.close ().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]