РефератыИнформатика, программированиеФаФайловый ввод/вывод

Файловый ввод/вывод

Тема доклада: Файловый ввод/вывод.


Функциональный язык программирования Лисп поддерживает широкие возможности для работы с файлами. При этом вводится понятие потока, с которым связан файл с одной стороны и какой-то символ с другой. Поток представляет собой некий абстрактный объект, с которым мы можем работать, не углубляясь в аппаратную и программную реализацию работы с данными.


Рассмотрим основные функции для работы с файлами:


OPEN
filespec &key direction element-type if-exists if-does-not-exist external-format


Функция создает, открывает и возвращает поток файла заданного в filespec.


filespec – путь к файлу


direction- одно из:input, :output, :io, или :probe. По умолчанию:input. Режим открытия файла (чтение, запись, чтение/запись, поток создан но закрыт)


element-type – тип данных с которыми поддерживает работу файл. По умолчанию Character.


if-exists – поведениееслифайлужесуществует (:error, :new-version, :rename, :rename-and-delete, :overwrite, :append, :supersede).


if-does-not-exist- поведение если файл не существует (:error, :create).


external-format – Внешний указатель формата файла. The default is :default.


Возвращаетпоток (stream).


(setqs (open “example.txt” :direction :io)); создает файл дле чтения/записи и связывает с ним символ s.

LOAD
filespec


Эта функция загружает файл выражений и выполняет эти выражения. filespec - это строковая константа, которая представляет собой имя файла может включать префикс директории, например "/function/test1". Если операция успешно завершина, LOAD возвращает имя последней функции, определенной в файле. Если операция не выполнена, LOAD возвращает имя файла в виде строкового выражения.


WRITE
-
BYTE
byte
stream


Записывает байт в выходной поток. Тип данных должен быть изменен на unsigned-byte;


_(with-open-file (s "temp-byte" :direction :output :element-type 'unsigned-byte)(write-byte 101 s)) => 101 ; в файле символ ‘е‘

WRITE
-
CHAR
char
stream


Записывает символ в выходной поток;


_(with-open-file (s "temp" :direction :output)(write-char #B s)) - B

WRITE-LINE
string &optional stream &key start end


Записывает строку (ключевые слова :start и :end позволяют задавать диапазон записываемой строки (отсчет с нуля)); производит перевод каретки на новую строку.


_(with-open-file (s "temp" :direction :output )(write-line “Hello, world” s))


=>“Hello, world”


WRITE-STRING
string &optional stream &key start end


Записывает строку но не добавляет новую линию в выходной поток;


_(with-open-file (s "temp" :direction :output )(write-string “Hello, world” s :start 3 :end 6))


=>“lo,”


READ-BYTE
stream &optional eof-error-p eof-value


Читает байт с входного потока.


eof-error-p – по умолчанию nil. Oбобщенная булева переменная (nil – false , все остальное true).


eof-value—признак конца файла.


_(with-open-file (s "temp-bytes" :element-type 'unsigned-byte)(read-byte s))=>101

READ-CHAR


&optional stream eof-error-p eof-value recursive-p


Читает символ с входного потока. Возвращает (целое) ASCII код считываемого символа. Если не задано <описателя файла> и в буфере ввода клавиатуры нет символов, READ-CHAR ждет, чтобы вы ввели что-либо с клавиатуры (заканчивающееся RETURN). Hапример, добустим, что буфер клавиатуры пуст:


(read-char)


будет ждать какого-либо ввода. Если вы набрали "АВС", завершив ввод RETURN, READ-CHAR возвратит 65 (код AS0CII буквы "А" (латинской)). Следующие три обращения к READ-CHAR возвратят 66,67 и 10 (переход на новую строку) соответственно. Если затем последует еще одно обращение к READ-CHAR, она будет ждать ввода;


_(with-open-file (s "temp-bytes")(read-byte s))=>#e

READ-LINE
&optional stream eof-error-p eof-value recursive-p


Читает строку. READ-LINE возвращает nil, иначе она возвращает строковое значение, которое было считано. Hапример, допустим, что F - это разрешенный указатель открытого файла:


(read-line f)


возвратит следующую введенную строку из файла или (если достигнут конец файла) nil.


PEEK-CHAR
&optional peek-type stream eof-error-p eof-value recursive-p


Читает символ с потока так, что он доступен для следующей операции чтения. Аргумент peek-type позволяет перескочить к пробелу (Т) или какомуто отдельному символу(acharacter); /* ??? */


UNREAD-CHAR
character &optional stream


Помещает символ назад на переднюю сторону входного потока, где он остается пока не прочитается снова;


LISTEN
&optionalstream


Возвращает Т если данные доступны на входном потоке;


READ-CHAR-NO-HANG
&optional stream eof-error-p eof-value recursive-p


Если символ доступен на входном потоке, функция возвращает символ, иначе nil;


CLEAR
-
INPUT
&optionalstream


Флеширует входной поток, если это нужно;


FINISH
-
OUTPUT
&optionalstream


Флеширует выходной поток и ждет результата от адресата;


FORCE
-
OUTPUT
&optionalstream


То же что и FINISH-OUTPUT но не ждет результата;


CLEAR-OUTPUT
&optional stream


Очистка буфера потока;


DELETE-FILE
filespec


Удаляет файл;


_(with-open-file (s "delete-me.text" :direction :output :if-exists :error) (delete-file s)); создаетиудаляетфайл


=> T


FILE-POSITION
&optionalstream


Возвращает текущую позицию в файле связанным с потоком srteam;


FILE-POSITION
&optional stream position-spec


Производит позиционирование в файле связанным с потоком srteam.


и возвращает Т если позиционирование удалость и NIL при неудаче;


(FILE-POSITION s 0) ; возврат к началу файла.


CLOSE
&optional stream


Закрывает поток.


Для работы с файлами можно использовать и функции PRINТ, PRINС, PRIN1 и READ. Приведем простенький пример:


; открываемпотокдлязаписи(setq out-stream (open "temp.txt" :direction :output))(print 'abc out-stream) ;записьстроки abcABC(close out-stream)T ; открываемпотокдлячтения(setq in-stream (open "temp.txt" :direction :input)) #<INPUT-STREAM "temp.txt">(readin-stream); считаем все с потокаABC(close in-stream)T
Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Файловый ввод/вывод

Слов:745
Символов:7500
Размер:14.65 Кб.