9 - Маъруза . Турбо-Паскалда файл тушунчаси. Типлашган файллар.
Режа
Файлли типнинг ифодаланиши
Файлни кайта ишлаш воситалари
Типлашган файллар
3.12Файлли типнинг ифодаланиши
Файл, файл узгарувчиси
Файл - бу ташки ташувчида хотиранинг номланган кисми булиб, берилганларни саклаш учун хизмат килади. Куп холларда файллар матнли каторлар ва езувлардан иборат булиб, каттик еки эгилувчан дискларда жойлашади.
Файлни эълон килиш учун file of ибораси ишлатилади. Файлга кириш учун махсу файлли узгарувчини куллаш керак (уни F билан белгилаймиз). Агар файл езувлардан иборат булса, у холда езув майдонларига кириш учун кушимча узгарувчи киритиш керак (уни R билан белгилаймиз).
Езилиши:
TYPE
<тип номи> = <компоненталар типи >;
VAR
: file of <тип номи>;
: <тип номи>;
Turbo Pascal компилятори 3 типдаги файлларни куллаш имконини беради: матнли,типлашган, типлашмаган. Буларни урганишдан аввал Turbo Pascalнинг киритиш ва чикариш стандарт воситалари билан танишиб чикиш зарур.
3.13Файлларни кайта ишлаш воситалари
Матинли файллар, типпашган файллар, типлашмаган файллар, Assign, ташки файлни очиш, киритиш-чикариш операцияларида хатолик холатлари,файлни ёпиш, бази бир файллар номини узгартирш ва учириш
Паскальда учта синф файллари мавжуд: матинли , типлашган ва типлашмаган. Паскальнинг файллар системасида Dos операцион системасининг имкониятларидан тула фойдаланиш мумкин. Тилда хар бир файлга аник типдаги файлли узгарувчи куйилади, шунинг учун файллар билан ишлашдан олдин хххххххх ни урнатиш лозим. Бунинг учун тилда куйидаги процедурадан фойдаланилади:
Assign (VAR F; Name: string);
бу ерда F - файл типли узгарувчи, каторли ифода Name эса операцион ситеманинг талабларига жавоб берувчи файлни тула номини уз ичига олади. Файл номининг умумий куриниши куйидагича:
Диск:\КаталогОстиНоми\...\КаталогОстиноми\ФайлНоми
<Диск> идентификатори мантикий курилманинг А дан Z гача булган литери оркали берилади. Агар \КаталогОстиНоми\ эълон килинмаса , файл жорий ост каталогда деб кабул килинади. Файлнинг тула ном узунлиги 79 белгидан ошмаслиги керак.
Файллар билан ишлаш учун энг аввало уни очиш зарур.Бунинг учун Паскаль тилида иккита процедура мавжуд:
Reset(VAR F : file); - бор файлни очиш;
Rewrite(VAR F : file); - янги файл ташкил килади ва очади.
Иккала прцедурани ёзишда хам File параметри хар кандай типдаги файл узгарувчисини билдиради. Reset процедураси ёрдамида ташки файлни очиш, агарда дискда у булмаса , дастурни бажаришда хатоликга олиб келади. Киритиш-чикариш операцияларидаги бундай хатоликларга олиб келиш холатларини махсус IOresult фукцияси кузатиб боради. Мисол. Файлни стандарт очиш.
Assign(F, '');
Reset(F);
Бундай файлларни очиш, берилганларни клвиатурадан олиб кириш имкониятини беради.
Тули типдаги файлларни очишда Reset процедурасидан фойдаланилганда кадайдир фарк булиши мусмкин. Текстли файлларга (Тенкст типли) нисбатан процедура файлни факат укиш учун очади. Типлашмаган файллар учун процедура яна битта word типдаги RecSize прметрини кушади. Бу параметр файл алмашинуви функциясида ёзув узунлигини урнатади.
Reset процедураси типлашмаган файл учун куйидаги куринишга эга:
Reset(VAR F: file; RecSize: word);
Rewrite процедураси янги файл ташкил килади ва очади. Бу процедурадан фойдаланиш алохида эьтиборни талаб килади. Мавжуд файл номи билан янги файлни ташкил килиш ёки очишда Rewrite процедураси шу номли эски файлни учиришга олиб келади.
Янги типлашмаган файлларни очишда Rewrite процедурасида ёзув узунлигини келтириш учун word типидаги кушимча RecSize процедураси кушилади. У холтда процедура куйидаги куриишга эга булади:
Rewrite(VAR F: file; RecSize: word);
Агар Rewrite процедураси текстли файлларда кулланилса, у холда, кейинчалик янги киритилаётган берилганлар учун факат ёзиш операциясини куллаш мумкин.
Файлни ёпиш операцияси хар кандай очилган файллар устида бажариладиган операцияларни тугатилишини курсатади.Бунга куйидаги процедура хизмат килади.
Close(VAR F);
Close процедураси файл узгарувчисини ташки файл билан алокасини Assign процерураси ёрдамида йукотади. Мисол. WORK.TXT номли оддий матнли файл ташкил килиш:
VAR
F: text;
BEGIN
Assign(F, 'WORK.TXT');
Rewrite(F);
Write(F, 'Оддий матнли файл');
Close(F);
END.
Файлларга хизмат килиш воситаларига кайта номлаш ва бази бир файлларни йукотиш процедураларини киритиш мумкин.Бу процедуралардан фойдаланиш файл типига боглик эиас.
Rename(VAR F; NewName : string);
Бу процедура хар кандай типдаги очилмаган F файлини кайта номлайди. Янги ном NewName каторида берилади.
Erase(VAR F);
Бу процедура F узгарувчи оркали берилган хар кандай типдаги очилмаган файлни йукотади.
Иккала процедурани хам очилиб булган файллар учун ишлатиб булмайди. Акс холда операцион система томонидан кераксиз осоратлар пайдо булиши мумкин.Йукотиш ва кайта номлаш операцияларини факатгина бор файлларга куллаш мумкин, акс холда дастур бажарилишида хатоликга йул куйилади.
Мисол. Файлни йукотиш ва кайта номлаш.
VAR
F: file;
Ch: char;
St: string;
BEGIN
Write('Файл номини киритинг: '); Readln(St); { номни укиш }
Assign(F, St); { Файл узгарувчисига ном тайинлаш }
Write('Файлни йукотиш (У), Кайта номлаш(П), Чикиш(В)'); Readln(Ch);
CASE Ch OF
'У','у' : Erase(F); { файлни йукотиш }
'П','п' : BEGIN
Write('Файлни янги номини киритинг: '); Readln(St);
Rename(F, St); { файлни кайта номлаш}
END;
'В','в' : Halt(1);
END; { case }
END.
Келтирилган мисолда у ёки бу харакатларни танлаш, клавиатурадан нима киритилаётганига боглик. Агар дискда St номли файл булмаса, дастурнинг бу варианти хатолик холатларига йул куймайди.
Файл операциялари аник ва хатосиз ишлаши учун махсус IOresult функциясидан фойдаланиш зарур. Функция параметрларсиз ишлайди ва Integer типидаги параметрларни кайтаради. Дастурда бу функциялардан файл операцияларини бажариш вактида ,киритиш -чикариш операциясининг стандарт текшируви учириб куйилганда фойдаоаниш мумкин.
Бу максадлар учун махсус опциядан ёки дастур матни ичида бериладиган{$I} компиляторидан фойдаланилади.
Мисол. Дискда файлнинг борлигини текшириш учун вариант.
VAR
F: file;
St: string;
BEGIN
Write('Файл номини киритинг: ');
Readln(St);
Assign(F, St);
{$I-} { хатоликни стандарт текшириш учириш }
Reset(F); { файл очиш}
{$I+} { хатоликни стандарт текширишни екиш }
IF IOresult = 0 THEN BEGIN
Writeln('Файл бор ва очик');
Close(F); { файлни епиш }
END
ELSE
Writeln(' '+St+' номли файл дискетада йук');
END.
Do'stlaringiz bilan baham: |