62
Бұл (stdout ) writedeviceнiң терминалының перделерiн үндеу бойынша stdoutт
енгiзу құрылымымен тағайындайды
•
stderr Стандарттык шығару қателер файл болып келеді, тек қана
жазу үшiнге қол жететiн. Үндеу бойынша бұл терминалдын экраны.
Writedevice (stderr) қателерi туралы stderr.шығару үшiн құрылымен
тағайындайды.
Файлдармен жұмыс істеу
Бұл бөлiмде файлдармен жұмыс істеу үшiн бiрнеше басқа предикаттар
сипаттаймыз Бұл келесі предикаттар filepos, eof, flush, existfile, deletefile,
renamefile, disk и copyfile.
Мысалдардың бірнешеуін келтірейік:
1. Келесі кіріспе тізбегіне somefile.pro файлға Text мəні жазып
алынады(myfile сияқты айналып жатыр), 100 позициядан бастап файлдын
бастауынан бойынша.
Text = "A text to be written in the file",
openmodifу(myfile, "somefile.pro"),
writedevice(myfile),
filepos(myfile, 100, 0),
write(Text),
closeflie(myfile).
Листинг бағдарламасында бұл істеп жасалынғандарды, байттың
артында байт файлдың ішіндегісін қолданып filepos тексеруге болады. Бұл
бағдарлама файлдың атын сұрайды, файлдың позициялардың ішіндегісін
содан соңын көрсетіп отыр, позициялардың нөмерлері клавиатурамен
жүргізіліп отырады.
2 листинг. ch12e09.pro бағдарламасы
domains
file = input
predicates
inspect_positions(file) - determ (i)
clauses
inspect_positions(UserInput):-
readdevice(UserInput),
nl,write("Position No? "),
readln(X),
term_str(ulong,Posn,X),
readdevice(input),
filepos(input,Posn,0),
63
readchar(Y),nl,
write("Char is: ",Y),
inspect_positions(UserInput).
goal
write("Which file do you want to work with ?"),nl,
readln(FileName),
openread(input, FileName),
readdevice(UserInput),
inspect_positions(UserInput).
Eof/1 предикаты
eof перидикатын тексеріп жатыр, процессте алған оқуларға файлдың
соңымен позиция келіп жатыр. Мұндай жағдайда eof табысты болады.
Қарсы жағдайда ол жағымсыз жағдайға да шыдайды. Eof перидикатының
түрлері:.
eof(SymbolicFileName) % (i)
Егер файл құқықтармен орындаулар уақыты тек қана жазуға ашық
болса қатені eof беріп береді. Назар аудараыыңыз, предикат ( +
комбинациялы пернелер) DOS файлдың аяқталуының нышанына ерекше мəн
туғызбайды.
Предикат пайдалы файлдармен жұмыс істеуінде предикатты анықтау
үшін қолдануға пайдалы, мысалы, файлдың аяғына жете болмайтын кезде
Вile нүктені сол мезгілдерге дейін қайтарады.
Предикат repfile predicates файлдармен жұмыста
repfile(FILE)
clauses
repfile(_).
repfile(F):-not (eof (F)), repfile(F).
Келесі бағдарламада басқа біреу файл өзгертеді, барлық əріптер
бастапқы болып келеді. Листинг 3. Программа ch12e11.pro
omains
file = input; output
predicates
convert_file - procedure ()
repfile(FILE) - nondeterm (i)
run - determ ()
clauses
convert_file :-
repfile(input),
readln(Ln),
upper_lower(LnInUpper,Ln), /* converts the string to uppercase */
write(LnInUpper),nl,
fail.
64
convert_file.
repfile(_).
repfile(F):-
not(eof(F)),
repfile(F).
run:-
write("Which file do you want convert ?"),
readln(InputFileName),nl,
write("What is the name of the output file ?"),
readln(OutputFileName),nl,
openread(input, InputFileName),
readdevice(input),
openwrite(output, OutputFileName),
writedevice(output),
convert_file,
closefile(input),
closefile(output).
goal
run.
Предикат flush/1
Передикат аталған файлға ішкі буферлер flush ішіндегісін жазып
отырады.
flush(SymbolicFileName)
% (i)
Ол буфер «барлық құлату жүйесін» сұрап жатыр.
Предикат existtile/1
Егер передикат existfile программасын табысты орындаса, онда
OSFileName файлы табылады. Предикат OSFileName тізбе бола алады, ал
сияқты, \psys\ *.cfg аты алмастырулар таңбалары бола алады: Егер файлдың
аты тізбеге белгі қойылған жолда емес предикат жетіспеушілігі existfile те
бітіп жатыр. Бірақ, байқаң, "system" (Жүйелік) қойылған атрибуттармен
барлық файлдарды, файлдарды қоса existfile де табады, жəне "hidden" де
(Бүркеме), ол тізбелерді таппайды. Суреттеп айтылған төмендегі тізбелерді
іздестірулер предикаттардың қолдануымен істелінген болу мүмкін.
Тексеру үшін файл дискіде болған жағдайда ғана (оны ашпастан
алдын) пайдалана аласыз open(File, Name) :-
existfile(Name),
openread(File, Name).
open(_, Name) :-
write("Error: the file ", Name," is not found").
Предикат searchfile/3
Предикат тізім жолдарында файлды табу үшін searchfile қолданылады.
Достарыңызбен бөлісу: |