Файлдар


Программа орындалғанда енгiзiлетiн берiлгендер өте көлемдi немесе программа орындалу нәтижесiнде есептелген нәтижелерін сақтау қажет болса, онда файлдық айнымалы шамалар қолданылады. Көп көлемдi берiлгендердi алдын ала сыртқы файлда даярлап, программа орындалу барысында сыртқы файлды программада қолданылатын файлдық айнымалы шамамен байланыстырып, файлдағы жазалған берілгендерді өндеуге болады.

Файлдық айнымалы шамалар File түйiндi сөзi арқылы сиптталады және нақты сыртқы файлдармен AssignFile процедурасы арқылы байланысады. Сыртқы файлдар есебiнде табақшадағы, дискеттегi немесе CD-табақшасындағы орналасқан файлды пайдалануға болады.

Object Pascal тiлiнде файлдардын үш түрiн ажыратады: мәтiндiк, типсiз және типтiк. Бұл файлдардын бiр бiрiнен айырмашылығы болғандықтан, олармен жұмыс атқарғанда жалпы және әр түрдегi файлдарға қолданылатын процедуралар мен функциялар деп ажыратылады.

Файлды сипаттау синтаксисы:

 Type

<файлдық шаманын  аты >=File of <кез келген стандартты  түр>;  -типтiк  файл;

      < файлдық шаманын   аты>= TextFile;  - мәтiндiк файл;

      < файлдық шаманын  аты >= File;   - типсiз файл.

File of, TextFile, File – Паскаль тiлiнiн түйiндi сөздерi. Кез келген стандартты түрлер есебінде Object Pascal-да файлдардан басқа түрлерді пайдалануға болады.

Файлдық түрдi және файлдық айнымалы шамаларды сипаттау келесi мысалда келтiрiлген:

    Type

     S= file of char;                     {типтiк символдық  файл}

     person= record                    {жазба анықтамасынынбасталуы}                                                                                                                                                                           Name,surname :string [20];

     Sex: 0..1;                             {0-male,1-female}

     Mygroup : string [10];

     Baga1,baga2,baga3: 2..5 ;

    end;

     Var f1,f2:  s;                         { f1,f2 айнымалылар   s типiне жатады деп анықталған, яғни}  {символдық файлдар }

     Table: file of String [80];     {жолдық  файл }

     DataBase: file of Person;     { DataBase айнымалы person  жазбалардан  тұратын файл }

     InputData:  file of real;        { нақты сандардан тұратын типтiк файл}

     …………………………

Файлдармен жұмыс атқару үшін оларды алдын ала ашып алу қажет. Осы әрекет арнайы процедура арқылы орындалады және алдын ала анықталған файлдық айнымалыны сыртқы файлмен байланыстырады, сонымен қатар мәлімет алмастыру бағыты көрсетіледі: файлға жазу немесе одан оқу.

7.1 Жалпы файлдарға қолданылатын процедуралар мен функциялар

Келесi процедуралар мен функцияларды кез келген түрдегi (мәтiндiк, типтiк және типсiз) файлдарға қолдануға болады:

Procedure AssignFile (var F; FileName:String) – файлдық айнымалы шаманы сыртқы файлмен байланыстырады. FileName – сыртқы файлдын аты (кейде маршруты көрсетiлуi ықтимал), F – файлдық айнымалы шама. Name MS - DOS ережесi бойынша файл орналасқан директориянын атын қамтуы қажет. Файлды иницияциалау дегеніміз, осы файлға мәлімет алмастыру бағытын көрсету. Object Pascal-да файлды оқуға, жазуға немесе бірден оқуға және жазуға даярлап ашуға болады.

Procedure Reset (var F) файлды оқуға даярлап ашу процедурасы. Файл көрсеткіші файлдын басына, яғни реттегі нөмірі 0-компонентіне орналасады;

Procedure Rewrite(F) – жана файлды жазуға даярлап  ашу процедурасы, егер F файлы бұрыннан бар болса, онда ескi файлды жойып, жана бос файл құрады;

Function ChangeFileExt (const FileName,Extension: string): string файл атынын кенейтілуін Extension параметрімен анықталған кенейтілуге өзгертеді;

Procedure ChDir(Path: string) – ағымдағы директорияны өзгертедi. Path параметрi жана директориянын атын және тұрағын қамтуы қажет;

Procedure CloseFile (var F) – байланысын үзбей файлды жабады. Жана файлды құрғанда немесе ескіні ұлғайтқанда барлық жана жазуларын сақтап, файлды каталогқа тіркестіреді. Егер программанын жұмысы дұрыс аяқталса, онда барлық ашылған файлдар автоматты түрде жабылады;

Function DateTimeToFileDate(DateTime:TDateTime):Integer - DateTime түріндегі берілгендін мәнін файлдын құрастырылған немесе өзгертілген ұақыттынын жүйелі  форматына түрлендіреді;

Function DiskFree(D:Byte): LongInt – көрсетілген табақшадағы бос орын көлемін анықтайды. Мұнда, D – табақшанын нөмірі (0 - келісімше анықталған құрылғы, 1 – А табақшасы, 2 – В табақшасы, т.с.с). Егер жоқ табақшанын нөмірі көрсетілсе, онда “- 1” мәні қайтарылады;

Function DeleteFile (const FileName: String):Boolean FileName  арқылы аты және тұрағы анықталған файл жойылады. Операция сәтті өтсе, онда нәтижесі True болады;

Function DiskSize(D:Byte):LongInt – көрсетілген табақшанын көлемін анықтайды. Мұнда, D – табақшанын нөмірі (0 – келісімше анықталған құрылғы, 1 – А табақшасы, 2 – В табақшасы, т.с.с.). Егер жоқ табақшанын нөмірі көрсетілсе, онда “- 1” мәні қайтарылады;

Function Eof (var F) файлдын сонын анықтайтын функция. Егер файл көрсеткiшi файлдын сонына жетсе, онда функциянын мәнi True, ал басқа жағдайда False болып табылады. Файлға жазылғанда келесi компонент файлдын сонына жалғастырылады деп санайды, ал файлдан қосылғанда – файлдын сонына жеткен белгiсiн көрсетедi. Сыртқы файл даярланғанда файлдын соны ^Z (CTRL – Z) – пен анықталады;

Procedure Erase (var F) сыртқы файлды жояды. Файл алдын ала жабылған күйде болу керек;

Function FileAge (const FileName: string):Integer – FileName атты файлдын сонғы өзгертілу уақытын анықтайды. Егер ондай файл жоқ болса, онда “- 1” мәні қайтарылады;

Procedure GetDir(N: byte; var S: string) – файл орналасқан табақшада директориянын атын анықтайды. S айнымалы шамасында директориянын маршруты мен аты жазылады, ал N табақшанын нөмірін көрсетедi (0 – келісімше анықталған құрылғы, 1 – А табақшасы, 2 – В табақшасы, т.с.с.);

Procedure MkDir(Path: string) жана директорияны құрады. Path параметрi жана директориянын маршрутын және атын қамтуы қажет;

Procedure Rename (var F: file, NewName: string) – файлдын атын өзгерту процедурасы. F – файлдық айнымалы шама, NewName файлдын жана аты;

Procedure RmDir(Path:string) бос директорияны жою процедурасы;

IoResult – сонғы енгiзу-шығару операциясынын орындалу нәтижесiн шығаратын функция. Егер енгiзу-шығару iс-әрекетi дұрыс өтсе, онда функциянын мәнi нөлге тен, басқа жағдайда кез келген сан болады.

7.2 Мәтiндiк файлдар

Мәтiднiк файлдар деп ASCII танбалар жолдарынан құралған табақшадағы файлдарды атайды. Мәтiндiк файл жолдын соны (CR/LF немесе Enter пернесi басу) деген белгiсi бар ұзындығы әртүрлi жолдар – жазбалар түрiнде сақталынады және файлдын сонында ^Z белгiсi тұрады. Жалпы жадтағы мәлiметтермен салыстырғанда мәтiндiк файлдардын айырмашылығы онын тұрақты құрылымында жатады. Файлдын ұзындығы алдын ала анықталмайды және онын ұзындығы табақшанын мәлшерiне байланысты болады. Мәтiндiк файлдын компоненттерi тек қана тiзбектеле өнделедi. Программада мәтiндiк файлдар Text File (мәтiн) түйінді сөзімен анықталады.

Мәтiндiк файлды сипаттау синтаксисы :

Type

  < файлдық шаманын   аты>= TextFile;   немесе

Var

 < файлдық шаманын   аты>: TexFile;

Мысалы:

     Var

          MyFile : TextFile;

Мәтiндiк файлдарға қолданылатын процедуралар:

Append (F) – бұрыннан құрылған файлды тек қана мәлiметтi қосуға, үстеуге даярлап ашады;

Reset ( F) файлды оқуға даярлап ашу процедурасы;

Rewrite(F) – жана ақпаратты жазуға даярлап, файлды ашу процедурасы. Егер F файлы бұрыннан бар болса, онда ескi файлды жойып, жана бос файл құрады;

Read (F,V1,V2,...,Vn) – тiзiмдегi айнымалылардын мәнiн файлдан оқу процедурасы. Егер F файлдық айнымалы көрсетiлмесе, онда тiзiмдегi айнымалылар мәндерi пернелер тақтасынан енгiзiледi;

Write (F,V1,V2,...,Vn) – тiзiмдегi айнымалылардын мәнiн файлға жазу процедурасы. Егер F файлдық айнымалы көрсетiлмесе, онда тiзiмдегi айнымалылар мәндерi экранға шығарылады;

CloseFile(F ) – файлды жабу процедурасы.

Дайындаe амалдарs орындалғаннан кейiн файлдан ақпаратты оқуға және файлға жазуға болады. Осы амалдарды орындау үшiн Write (жазу) және Read (оқу) процедуралары пайдаланылады. Бұл процедураларда файлдын атын және енгiзу – шығару тiзiмiн көрсету керек.

Read (F,V1,V2,...,Vn) – тiзiмдегi айнымалылардын мәнiн файлдан оқу процедурасы. Жалпы файлдан оқу процедурасынын орындалуы тiзiмдегi көрсетiлген айнымалылардын түрiне байланысты болады. Символдық айнымалыға файлдағы кезектi символ бөлгiш танбаларымен (Ctrl/LF / ^Z) бiрге орналастырылады, арифметикалық типке – бос орындарды және көлденен табуляция танбаларын тастап өтiп, арифметикалық тұрақтынын мәнiн келесi бос орындар және көлденен табуляция танбалары кездескенге дейiн, жолдын немесе файлдын сонына дейiн оқиды.

Write (F,V1,V2,...,Vn) файлға жазу процедурасынын орындалуы тiзiмдегi көрсетiлген айнымалылардын түрiне байланысты болады. Сиволдық, арифметикалық және жолдық шамалардын мәндерi жазылады, ал Boolean шамалардын мәндерi True немесе False түрiнде шығарылады. Мысалы,

Write(MyFile, ‘Сәлем’);   {‘Сәлем’- сөздi  MyFile деген файлдын}

                    {сонына жiбередi, яғни  жазады};

Мәтiндiк файл – тiзбектелген файл, онын қажеттi элементiне қол жеткiзу үшiн алдынғы элементтерi оқылады.

7.3. Типтiк файлдарға қолданылатын процедуралар мен функциялар

Типтiк файлдарға келесi процедуралар мен функцияларды қосымша қолдануға болады:

Read (F, “енгiзу тiзiмi”) файлдағы мәлiметтердi көрсетiлген енгiзу тiзiмiндегiайнымалыларға оқитын процедурасы;

Seek (F,NUM) файлдын көрсетiлген компонентiне файл көрсеткiшiн орналастыру (жылжыту) процедурасы. NUM – файл компонентiнiн нөмiрi, ол нөлден басталады. Бұл процедура арқылы типтiк файлдын кез келген бөлiгiне қолмақол қол жеткiзуге болады;

Truncate (F) – берiлген позициядан бастап файлдын сонына дейiн файлдын бөлiгiн жою процедурасы;

Write (F, “шығару тiзiмi”) “шығару тiзiмiндегi” көрсетiлген айнымалылардын мәнiн файлға жазу процедурасы;

FilePos (F) – файл көрсеткiшi орналасқан ағымдағы компоненттiн нөмірін анықтау функциясы;

FileSize (F) – алдын ала ашылған файлдын көлемiн анықтау функциясы. Берiлген файлға қосымша компоненттердi жазу ұшiн файл көрсеткiшiн файлдын сонына жылжыту қажет, мысалы:

Var

F: File of integer;

X: integer;

……………………

Seek(F,FileSize(F));

             {файл көрсеткiшiн файлдын сонына жылжытады }

Write(F,X);           { X  мәнiн  файлдын сонына жазады}

………………………..

7.4 Типсiз файлдар

Типсiз файлды сипаттау синтаксисы:

Type

         < файлдық шаманын  аты >= file;       немесе

 Var

     < файлдық шаманын  аты >: file; ; -типсiз файлды сипаттау.

Типсiз файлдарды бiрiншiден кез келген түрдегi файлдармен байланыстыруға болады, екiншiден жадпен магниттiк табақша арысындағы осы файлдар арқылы мәлiмет алмастыру iс-әрекеттерi өте шапшан орындалады.

Reset және Rewrite дайындау жұмыстарын атқарғанда процедурада файлдын ұзындығын көрсетуге болады. Мысалы,

Var

F: file;

Begin

……………….

Assign( F, ’myfile.dat’);

Reset( F, 512);

………………     end.

Егер процедурада файлдын ұзындығы анықталмаса, онда оны 128 байт деп санайды. Жалпы типсiз файлдын ұзындығына қойылатын талаптар: ұзындығы терiс және 65535 байттан аспау керек. Алмастыру әрекеттерiн шапшандату үшiн файлдын ұзындығы магниттiк табақшадағы сектордын ұзындығына – 512 байтқа  еселi болғаны жөн.

Типтiк файлдарға арналған процедуралар мен функцияларды типсiз файлдарға да қолдануға болады. Бiрақ Read және Write орнына BlockRead және BlockWrite процедуралары қолданылады.

       BlockRead(F,  < буферлық айнымалы >,  [<NN>]);

       BlockWrite (F, < буферлық айнымалы >,    [<NN>]);

мұнда F – файлдық айнымалынын аты; <буферлық айнымалы> - осы айнымалы арқылы алмастыру жұмыстары орындалады; <NN> - мiндеттi емес параметр, процедура жұмысын бiтiргеннен кейiн бұл параметрдiн мәнi алмастырылған жазулар санына тен болады.

Жалпы Seek (F, NUM), FilePos (F), FileSize (F) процеруралар арқылы файлдын кез келген компонентiне қол жеткiзуге болады.