Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Язык Pascal
Файловый тип или переменную файлового типа можно задать одним из трех способов: < имя> =FILE OF < тип>; < имя> =TEXT; < имя> =FILE; В зависимости от способа объявления можно выделить 3 вида файлов: -типизированные файлы (задаются предложением FILE OF…); -текстовые файлы (определяются типом TEXT); - нетипизированные файлы (определяются типом FILE). Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN: ASSIGN (< ф.п.>, < имя файла или л.у.>); Инициировать файл означает указать для этого файла направление передачи данных. RESET(< ф.п.>) инициирует: чтение в файл. REWRITE(< ф.п.>)-инициирует запись информации в файл или в логическое устройство. APPEND(< ф.п.>)-инициирует запись в ранее существовавший текстовый файл для расширения. Текстовые ф. связываются с ф.п., принадлежащими типу TEXT. Текстовые ф. предназначены для хранения текстовой информации. В Паскале текстовый файл трактуется как совокупность строк переменой длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстового файла в конце каждой записи ставится специальный признак EOLN, а в конце всего файла – EOF. Для доступа к записям применяются процедуры READ([< ф.п.> ], < с.п.ввода>)-обеспечивает ввод символов, строк и чисел. READLN([< ф.п.> ], < с.п.ввода>)-идентична предыдущей за исключением того, что после считывания последней переменной оставшаяся часть строки до маркера EOLN пропускается, поэтому след. Обращение к READLN или READ начинается с первого символа новой строки. WRITE([< ф.п.> ], < с.п.ввода>)-обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство, WRITELN([< ф.п.> ], < с.п.ввода>) - идентична предыдущей за исключением того, что выводимая строка символов завершается кодами CR, LF. и функции SEEKEOLN, SEEKEOF, EOLN([< ф.п.> ])-возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки. Типизированные ф. Длина любого тип-го ф. строго постоянна, что дает возможность организовать прямой доступ к каждому из них. Для доступа к записям применяются процедуры READ, WRITE, а так же функции SEEK(< ф.п.>, < N-компонента>)-смещает указатель ф. к требуемому компоненту. FILESIZE(< ф.п.>)-возвращает значение типа LONGINT, которое содержит количество компонентов файла. FILEPOS(< ф.п.>)-возвращает значение типа LONGINT, содержащее порядковый номер компонента файла. Нетипизированные ф. объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти ф. совместимыми с любыми др.файлами и позволяет организовать высокоскоростной обмен данными м/у диском и памятью. При работе с этими ф.применяются все процедуры и функции, доступные тип-м ф., за искл.READ, WRITE, кот. заменяются высоскоростными процедурами BLOKREAD(< ф.п.>, < буф.>, < [, NN]>) и BLOKWRITE(< ф.п.>, < буф.>, < [, NN]>) CLOSE(< ф.п.>)-заравает файл RENAME(< ф.п.>, < новое имя>)-переименовывает RASE(< ф.п.>)-уничтожает , FLUSH(< ф.п.>)-очищает внутренний буфер файла и, таким образом, гарантирует сохранность всех последних изменений файла не диске.
№ 65 Объектно-ориентированные средства ввода-вывода. Для организации ввода-вывода данных встроенных типов в программе на С++ используется заголовочный файл iostream.h, который содержит определение нескольких классов и объектов, обеспечивающих методы ввода – вывода. В частности, язык поддерживает четыре предопределенных объекта, выполняющих ввод-вывод: Cin-ввод(обычно с клавиатуры) Cout-вывод(обычно терминал) Cerr-вывод ошибок (обычно клавиатура) Clog-буферизованная версия Cerr В файле iostream.h определены классы istream и ostream, которые используются для управления ввода и вывода соответственно. В этих классах перегружены операции ввода и вывода для встроенных типов данных. Например: Class ostream { Public: Ostream & operator< < (char*); Ostream & operator< < (int); Ostream & operator< < (long); Ostream & operator< < (double); .... }; Cout- объект класса Ostream. Оператор cout< < x; посылает значение переменой x в объект сout класса Ostream для вывода. Функция operator< < возвращает ссылку на объект Ostream, для к-ого она была вызвана. Поэтому к результату операции вывода < < можно еще раз применить операцию вывода, т.е. неск.операций можно сцепить: Cout< < ”x = “< < x < < endl; Такая запись проинтерпритируется как: ((cout.operator< < (“x=”)).operator< < (x)).operator< < (endl); Аналогично опред. ввод cin. Ввод и вывод данных пользовательских типов можно организовать с помощью функций-членов класса. Например для класса Complex ф-ия для вывода на экран комплексного числа может иметь вид: #include< iostream.h> #include< math.h> Class Complex{ Double real; Double image; Public: Complex(double r) { real=r; image=0; } Complex(double r, double i) { real=r; double=i; } ~Complex () {} Int isEqual (Complex &); Int isGreater (Complex &); Int isLess (Complex &); } Функция для вывода на экран компоексного числа может иметь вид: Void complex:: printComplex () { Cout< < real< < ”+I *”< < image< < endl; } Объект можно напечатать, вызывая эту функцию. Если перегрузить операцию < < операцию для какого-либо класса, то с ее помощью можно будет напечатать объект этого класса точно так же как для встроенных типов данных: Ostream & operator < < (ostream & r, Complex c) { Return r < < c.real< < ”+i*” < < c.image< < endl; } Cout < < c1; Так как функция-операция возвращает ссылку на объект класса ostream, то можно сцепить нашу операцию в цепочку: Cout < < “Комплексное число: ”< < c1; Ф-ия для перегрузки операции < < обязательно должна быть объявлена как дружественная классу Complex, а не как его член, потому что в операции вывода слева стоит объект другого класса. Ф-ия член класса первым аргументом всегда неявно получает указатель this, а операция вывода < < должна получить ссылку на класс ostream. Ввод пользовательского типа определяется аналогично выводу. Отличие состоит в том, что для операции ввода важно, чтобы второй параметр был ссылкой: istream & operator > > (istream & r, Complex & c) { Return r> > c.real> > c.image; }
|