11-Маъруза. Матнли файллар.
Режа
Матнли файллар
Матнли файлларни киритиш-чикариш
Матинли файлларнинг афзаллиги ва камчиликлари
3.17Матинли файллар
Матинли файл, сатр охири маркери, матинли файлларни очиш, Append режимида очиш, SeekEoln, SeekEof
Матинли файлни 0 дан 256 гача булган белгилар катори кема -кетлиги деб караш мумкин. Матинли каторни ёзиш учун Text стандарт типидан фойдаланилади
VAR
F: text; { F - файл узгарувчиси }
Хар бир катор катор охири маркери билан тамомланади. Амалиётда бундай маркерни иккита белги кетма -кетлиги ташкил килади: Сатрга утиш chr(13) ва карреткани кайтариш chr(10). Ушбу иккита белги матинли файллар устидаги стандарт харакатларни белгилайди. SYSTEM модулидаги стандарт очиладиган Input ва Output файллари Text типли булади.
3.18Матнли файлларни киритиш ва чикариш.
Append(VAR F : text), Readln(VAR F : text; V1 [,V2,...Vn]), Writeln(VAR F : text; V1 [,V2,...Vn]), Еoln(VAR F: text), Eof(VAR F:text), SeekEoln(VAR F: text), SeekEof(VAR F: text), Flush(VAR F: text), SetTextBuf(VAR F : text; VAR Buf[; size : word]) процедура ва функциялари
Матли файллар уз спецификасига эга. Read укиш ва Write ёзиш процедураларининг махсус кенгайтмаси белгили булмаган типлар билан ишлаш имкониятини беради.
Read(F, Ww) ларнинг чакирилиши, бу ерда Ww - word типидаги узгарувчи, сонлар кетма-кетлигини F файлидан укиб, Ww.узгарувчисига узлаштиради. Бошка холларда дастурда хатоликка олиб келади.
Матинли файлларни очишни стандарт усулларда олиб бориш мумкин:
Файл узгарувчисига мос файл номини куйиш ( Assign процедураси), янги матн файлини очиш ( Rewrite процедураси);
ёки файл узгарувчисига мос файл номини куйиш ( Assign процедураси ), бор файлни очиш (процедура Reset).
Матинли файллар узининг спецификациясига караб, укиш ёки ёзиш операцияларидан биттаси билан ишлаш имкониятини беради. Шунинг учун матнли файллар билан ишлашда яна битта процедура ,файлни очиш процедураси пайдо булади:
Append(VAR F : text);
Бу процедура файлни очиб, курсорни файл охирига келтириб куйяди. Append процедурасига куйиладиган талаблар хам худди Reset ва Rewrite процедураларига куйилган талабларга ухшаш.
Матинли файлларни кайта ишлаш учун Read ва Write процедуралари кулланилади. Readln процедураси каторларни булувчи махсус тил воситаси хисобланади. Унинг вазифаси худди Read нинг вазифасига ухшаш ва укишни катор охирининг маркеригача олиб боради ва бошка янги каторга утишни таъминлайлади. Writeln, процедураси хамма катталикларни езишни таъминлайди. Процедуралар езилишининг куриниши куйидагича:
Readln(VAR F : text; V1 [,V2,...Vn]);
Writeln(VAR F : text; V1 [,V2,...Vn]);
бу ерда V1...Vn турли типдаги узгарувчилар. Read ва Readln процедуралари орасидаги фарк нимада деган саволга куйидагича жавоб бериш мумкин. Read процедураси берилганларни хаммасини бир каторга олиб кириш имконини беради Readln операцияси эса албатта бир катор тугагандан кейин автоматик равишда иккинчи каторга утишни таъминлайди, яъний берилганларни турли каторлардан олиб кириш мумкин. Write ва Writeln процедураларида хам худди шундай.
Киритиш чикариш операцияларини бажараетган пайтда махсус Eoln, Eof, SeekEoln, SeekEof функцияларидан ташкил топган тил воситасини куллаш мумкин.
Аагарда файлнинг жорий позицияси файл охири маркерида турган булса Еoln(VAR F: text) функцияси, True нинг булев кийматини кайтаради. Колган хамма холатларда функциянинг киймати False булади.
Агарда курсор охирги компонентадан кейин турган булса, Eof(VAR F: text) True нинг булев кийматини кайтаради, акси холда False булади.
Мисол. Матнли файлнинг биринчи каторидан олтита кетма-кет белгиларни укиш.
VAR
F: text;
St: string[6];
BEGIN Assign(F, 'EXAMPLE.PAS'); { EXAMPLE.PAS файли бор булиши керак } Reset(F);
WHILE NOT Eoln(F) DO BEGIN { биринчи катор охирини текшириш }
Read(F, St);
Writeln('St = ', St); { экранга чикариш }
END;
Readln(F); { 2- каторга утиш }
Close(F);
END.
SeekEoln(VAR F: text) функция курсор катор охирида турганда True нинг булев кийматини кайтаради. Акси холда функция False кийматни кайтаради.
SeekEof(VAR F: text) функцияси агарда курсаткич файл охири маркерида турган булса True нинг кийматини кайтаради. Бу функцияларни куллаш текисли файллардан сонли кийматларни укишда кулайлик яратади. Дискдаги матнли файллар билан ташки дастур орасидаги ахборот алмашувини куриб чикамиз. Берилганларни олиб кириш учун оператив хотирадаги киритиш- чикариш буферидан фойдаланамиз.
Паскаль тилида стандарт киритиш чикариш буфери 128 байт хажмга эга булади. Хар кайси очилган файлга узининг буфери куйилади. Ташки ахборот ташувчиларига мурожат килишни оптималлаштириш вазифаси куйилади.
Масалан , Writeln процедураси хамма берилганларни буферга кетма-кет езади. Охирги буфер банд булган холатдагина езувлар ташки курилмага езилади. Езувларни дискга кучириб булгандан сунг буфер кейигги ахборот кабул килиш учун бушайди. Езувларни бу тартибда езиш жуда куп вактни олади Шунинг учун махсус киритилган Flush(VAR F: text) процедураси Write ва Writeln процедуралари ердамида езувларни дискдаги физик езувлар билан боглаш имкониятини беради. Процедурани чакириш езиш учун берилган хамма белгиларни хакикийлигини уларни ташки файлга езилишини гарантиялайди. Бу процедуларни Rewrite ва Append. процедуралари оркали очилган матнли файллар учун куллаш мумкин. Амалий дастурларда бу процедуралардан кисман фойдаланилмайди.
Амалиетда матнли файлларни кайта ишлаш хотирадаги хамма файлларни санаб чикиш ва ундан кейин файлларни дискга езиш учун хизмат килади.
SetTextBuf(VAR F : text; VAR Buf[; size : word]) процедура
F файлига Size хажмдаги узининг киритиш- чикариш Buf ни урнатиш имконини беради Size параметри чакиришда ташлаб кетилиши мумкин.У холда буфер улчови SizeOf(Buf) га мос булади. F файл узгарувчисига SetTextBuf нинг куйилиши узгарувчига янги ташки файлни куллашгача таркалиши мумкин.
Мисол. Киритиш- чикариш буферини куйилиши
VAR
F: text;
Ch: char;
Buf: array[1..2048] of char; { буфер 2 Кбайт }
BEGIN
Assign(F, ParamStr(1)); { команда каторидан файлга ном куйиш }
SetTextBuf(F, Buf); { файлга 2 Кбайт буферни урнатиш }
Reset(f);
WHILE NOT Eof(F) DO BEGIN { файлни экранга чикариш }
Read(F, Ch);
Write(Ch);
END;
END.
Назорат саволлари
1.Матнли файл деб кандай файлга айтилади?
2. Сатр охири маркери нима?
3. Append(VAR F : text) ни вазифаси нима?
4. Readln(VAR F : text; V1 [,V2,...Vn]) ни вазифаси нима?
5. SeekEoln(VAR F: text) нима вазифа бажаради?
6. Writeln(VAR F : text; V1 [,V2,...Vn]) процедурасини ишлашини тушунтиринг.
Еoln(VAR F: text) ва Eof(VAR F:text) процедуралари кандай вазифа бажаради?
SeekEoln(VAR F: text), SeekEof(VAR F: text) процедураларининг вазифасини тушунтиринг.
Flush(VAR F: text) процедурасининг ишлашини тушунтиринг.
SetTextBuf(VAR F : text; VAR Buf[; size : word]) процедуранинг ишлашини тушунтиринг.
Do'stlaringiz bilan baham: |