рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Работа с файлами

Работа с файлами - раздел Программирование, Логическое программирование /* Telefon Book + File */ Trace Domains Name,adr= ...

/* telefon book + file */

trace

domains

name,adr= string

datad=c(name,adr)

file=d

predicates

person(name,adr)

getdata(file)

clauses

person(Im,Adr):-

openread(d,"Telefons"),

readdevice(d),

getdata(d),

readterm(datad,c(Im,Tel)),

closefile(d).

getdata(_).

getdata(Fajl):-

not(eof(Fajl)),

getdata(Fajl).

goal

clearwindow,

person("Bond",Tel),

write(Tel).

 

Предикат getdata нужен для того, чтобы поиск в базе данных продолжался, пока не найдено то, что указано в цели (преикат используется в качестве точки решения для возврата).

 

Фаил данных

c("АААААА","65_55_35").

c("ББББ","23_37_24").

c("Bretski","98-12-16").

c("Bond","21-07-79").

c("ММММ","62_13_06").

2.2.3. Операции чтения

 

readdevice(символ_имя)

(file):(i)(o)

 

Символическим именем устанавливается (1) текущее устройство

чтения, в случае (о) возвращается его символическое имя. По

умолчанию действует readdevice(keyboard), то есть чтение с

клавиатуры. Если указывается символическое имя файла, то этот

файл должен быть открытым на чтение или модификацию.

 

readint(целое)

 

(integer):(о)

 

Читает целое число с текущего устройства чтения. Чтение

заканчивается с помощью <ВК>.

 

readrea(действительное)

(real):(о)

 

Читает действительное число с текущего устройства чтения. Чтение

заканчивается с помощью <ВК>.

 

readchar(знак)

 

(char): (о)

 

Читает отдельный знак с текущего устройства чтения, причем все

знаки равноправны (то есть читаются также управляющие символы).

 

readln(строка)

 

(string):(о)

 

Читает знаки с текущего устройства чтения. Конец чтения с

помощью <ВК>.

 

file_str(имя_файла,строка)

(string,string): (i,o)(i,i)

 

Читает (i,o) знаки (до 64 Кбайт) из файла с дискеты, имя

которого указано, в строку. Чтение прекращается, когда

встретится признак конца файла (CTRL/Z). В случае (i,i) cтрока

записывается в файл.

 

readterm(область,терм)

 

(имя области определения,терм области):(i,о)

 

Читает после открытия файла факты из файла. Область определения

- это область, как она указывается в секции domains, а терм

области - это терм, который соответствует такой области.

Например, получить адрес из базы данных, которая находится в

файле DATA. DAT:

 

содержимое файла DATA. DAT:

 

р("Вяад","Киев"). р("Карен","Ильменау").

р("Хайди","Браззавиль"). р( "Федя","Магадан").

 

domains

 

name.adress = string

datadoinain = p(name,adress)

file =d

predicates

person(name,adress)

getdata(file)

clauses

 

person(Imj a,Adres): -

openread(d,"data. dat"),

readdevice(d),

getdata(d), .

readterm(datadomain,p(Imja,Adres)),

closefile(d).

getdata( _ ).

getdata(Fajl):-

not(eof(Fajl)),

getdata(Fajl).

goal

clearwindow,

person("Хайди",Adres),

write(Adres).

 

При этом предикат getdata нужен для того, чтобы поиск в базах

данных продолжался, пока не найдено то, что указано в цели (то

есть предикат используется в качестве точки решения для

возврата).

 

inkey(знак)

 

(char): (о)

 

Заканчивается удачей, если после предыдущей операции чтения была

нажата клавиша. Тогда возвращается ее код. Если не 'было нажатой

клавиши, то предикат заканчивается неудачей.

Например, рисовать окружность, пока не нажата любая клавиша:

 

predicates

kreis

clauses

kreis:-

inkey(_).

kreis: -

forward(100),right(l),kreis.

goal .

graphics(2,l,7).kreis.

 

Операции записи

 

writedevice(симвод_имя)

(file): (i),(о)

 

Устанавливает (i) символическим именем текущее устройство

записи. В случае (о) возвращается символическое имя текущего

устройства записи. Предопределены символические имена screen

(экран, действует по умолчанию), printer (печатающее

устройство), сопи (серийный интерфейс). Если указывается

символическое имя файла, то этот файл должен быть открытым на

запись или модификацию.

 

nl

 

Выдает на текущем устройстве возврат каретки и перевод строки

(<ВК><ПС)). Другим способом выдачи <ВК><ПС> является write('n'^)

или write("10").

 

write(Xl,X2,...)

 

(переменные и константы): (i,i,...)

 

Выдает на текущем устройстве записи константы и содержимое

переменных. Если в строке указана обратная косая "", то

последующие три цифры принимаются как ASCII-код одного знака,

который выводится.

Короткие примеры:

 

goal

 

write("123abc"), /* пишет 123abc , нету ""t */

 

write("abc1234"), /* пишет abc{4 , "123=АSСП-код для { */

 

wrtte("abcnl23"), /* пишет abc */

/* 123 -*/

/* пишет abc */

write("abc10123"), /* 123 , 010=<ВК><ПС> */

 

write("abc10xl23"). /* пишет abc */

/* х123 , 010°<ВК><ПС> */

/* х как ограничитель */

 

 

writef(формат_строка,XI,Х2,...)

(string.nepеменные и константы): (i, i, i,...)

 

Форматный вывод констант и содержимого переменных. В

формат_строке указываются печатаемые знаки определявшие форматы

вывода. Форматы даются в следующем виде:

 

"X-m.pw"

 

где % - признак форматного вывода;

 

- - (опция) если указан, то знаки в поле вывода будут

выравниваться по левому краю, если нет - по правому;

 

m - (опция) указывает длину поля вывода;

 

р - (опция) при выводе чисел указывает количество цифр после

десятичной точки;

 

w - (опция) указывает нотацию чисел, причем здесь могут

записаться следующие буквы:

 

f - действительное число в десятичном виде (действует по

умолчанию);

 

е - действительное число в экспоненциальном виде;

 

g - использование самого короткого формата.

 

Например:

 

write("привет") привет

 

writef("X6","привет") привет.

 

witef("X8","привет") привет

 

writef("X8.1",123.89) 123. 9

 

wrltef("X8.1e",123.89) 1.2Е+02

 

writef("Xe",123.89) 1.2389E+02

 

writef("это числа %I и %4.1, а также %-10el",X,Y,Z)

где Х - 1.0, Y - 3.37, Z » 4.5 выводит:

 

это числа 1 и 3. 4, а также 4.5Е+00 I

 

Работа с файлами

 

disk( маршрут)

(string):(l)(o)

 

Устанавливает (i) иди возвращает (о) текущий дисковод и подкаталог.

 

Например, читать файл по указанным дисководу, маршруту и имени

файла, и вывести его:

 

goal

clearwindow,

write("дисковод (N:): "),readln(D),

write("маршрут: "),readln(M),

concat(D,M,S),

disk(S),

writе("файл - имя.тип: "),readln(Fajl),

file_str(FaJl,Str),

makewindow(l,7,0,"",0,0,25,80),

write(Str),readchar(_).

 

existfile(имя_фaйлa) .

(string) :(i)

 

Истинно, если в текущем каталоге существует файл с указанным

именем.

 

openwrite(символ_имя,имя_файла)

(file,string): (i,l)

 

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

связывает этот файл с символическим именем для дальнейшей работы

с ним. Если указанный файл уже существует, то он убирается.

Предопределенными символическими именами являются printer

(паралельный интерфейс), screen, keyboard, com1 (серийнный

интерфейс). Их открывать не нужно.

 

openread(символ_имя,имя_файла)

 

(file,string):(i,i)

Открывает файл для операции чтения (см. также openwrite).

 

openmodify(симвод_имя,имя^файла)

(file,,striner):(i,i)

 

Открывает файл для операции записи и чтения. Может быть

использован вместе с предикатом filepos (см. ниже), чтобы

актуализировать файлы с прямым доступом (см. также openwrite),

 

openappend(символ_имя, имя_файда)

(file,string): (i,i)

 

Открывает файл для дописывания (см. также openvrite). .

 

closefilе(символ__имя).

(file):(i)

 

Закрывает файл с указанным символическим именем. Истинно также,

если файл не был открыт.

 

eof(символ_имя)

(file).:(i)

 

Истинно; если указатель файловой позиции указывает на конец

файла.

 

filepos( символ_имя, позиция, режим)

(file,real,integer): (i,i,i),( i,o,i)

 

В случае (i,i,i) в зависимости от режима устанавливается в

указанном символическим именем файле знаковая позиция, с которой

продолжаются операции чтения или записи. Модуль определяется по

следующей таблице:

 

ружим Знаковая позиция
Относительно начала файла; первый знак имеет позиции 0
Относительно текущей позиции,ее знак имеет позицию 0
Относительно конца файла; последний знак имеет позицию 0

 

Например в новом файле после write("0l23n") указатель позиции

равен 6 (относительно начала файла). Это можно иллюстрировать

так:

 

знак 0 1 2 3 <ВК> <ПС>

позиция 0 1 2 3 4 5 6

 

 

В случае (i,o,i) возвращается позиция относительно начала

(только!) файла.

 

Еще пример: писать два слова в файл, и в диалоге показать

десятичный ASCII-код по указанной позиции (конец при позиции -1,

или при позиции, большей максимальной):

 

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

 

с л о в о 1 <ВК> <ПС> с л о в о 2 <ВК> <ПС!>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

 

domains file=f

predicates dwa_slowa dialog ;

goal

clearwindow,

dwa_slowa,

openread(f,"test"),

dialog, .

closeflle(f).

clauses

dwa_slowa: -

openwrite(f,"test"),

writedevice(f),

write("cлово1nслово2n),

closefile(f),

writedevice(screen).

dialog: -

readdevice(keyboard),nl,

write("номер позиции: "),readreal(X),X<>-l,

readdevice(f),

filepos(f,X,0),readchar(Y).

char_int(Y, Z),

. wite(Z)," "),

dialog.

dialog.

 

flush(символ_имя)

(file):(i).

 

Пишет содержимое внутреннего буфера файла на текущее устройство

записи (обычно это происходит автоматически), например, при

выводе на серийный интерфейс.

 

геnаmе(имя1,имя2)

(string,string): (i,i)

Файл с указанным именем переименуется в имя2.

 

deletefile(имя)

(string)

 

Файл с указанным именем убирается с дискеты.

 

– Конец работы –

Эта тема принадлежит разделу:

Логическое программирование

Логическое программирование... После многолетних теоретических работ по математической логике в году в... Для программиста особенность языка Пролог состоит в том что он на основе выражений логики предикатов может заниматься...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Работа с файлами

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

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

Логика предикатов
С помощью логики предикатов можно выразить связи между различными вещами. Формально высказывания в логике предикатов имеют вид: P(t1,t2,…tn), Где t1, t2, …, tn – аргументы,

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

Дизъюнкты
База данных составляется с помощью предикатов, каждый из которых описывается множеством дизъюнктов: Функтор(аргумент1, аргумент2, …):-условие1,условие2,… . Где функтор- имя предик

Константы и переменные
Константы должны начинаться с маленькой буквы, либо стоять в одинарных или бинарных кавычках, либо они являются числами: -mother -price -list‘f’ 169 1.4e-3  

Секции программы
Секция domains-(объявление областей определения). 1 Способ. имя области = d где d- любой тип. Например person=string nomer=integer

Обработка программ Турбо Прологом
Обработка программ ведется по принципу “поиска вглубь”.Это означает, что ТП всегда пытается доказать утверждение в дизъюнктах слева направо с помощью фактов и правил из базы данных. Целево

Возврат и отсечение
ТП в случае, если есть больше одного дизъюнкта для одного предиката, отмечает этот дизъюнкт точкой решения, чтобы он мог вернутся в эту точку и продолжить работу со следующим дизъюнктом, даже есла

Рекурсия
Вычисление факториала: .f(0)=1 f(n+1)=(n+1)*f(n) .predikrtes fak(integer, real) .clauses fak(0,1):-!. /* 0!=1 */ fak(N, Fak):- N>0, /*только

Изменения в базе данных
  asserta(факт) (dbasedom): (i)   Добавляет новый факт перед остальными фактами того жe предиката в оперативную базу данных. Факт должен быть

Арифметика
  Арифметические утверждения присваивания имеют следующий общий вид:   результат = операнд1 оператор операнд2   В качестве опера

Работа с данными типа string
  concat( строка1, строка2, строкаЗ) (string,string,string):(i,i,i)(i,i,o)(i,o,i)(o,i,i)   В зависимости от конкретизации выполняется лексикографическа

Преобразование типов
  Все предикаты преобразования типов действуют в обе стороны ((i,о) и (o,i)), а случай (i,i) проверяет истинность (не для предиката real). Преобразование между типам

Команды операционной системы
  Для выполнения команд system и dir необходимо, чтобы Турбо-Прологу была доступна дискета с COMMAND. СОМ.   system(команда) (string):(i)

Версии Турбо-Пролога
  Данные методические указания описывают версию 1.0. Уже доступная версия Турбо-Пролог 1.1 имеет следующие дополнительные возможности: - предикат makewindow

Внешняя среда системы Турбо-Пролог
  Турбо-Пролог после запуска предпологает определенную конфигурацию своих и пользовательских файлов. Различаются пять каталогов: 1. Турбо-каталог. Здесь дол

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги