Мәтiндiк файлдан мэлiметтердi оқу

Егер мәтіндік файлдардағы жазбалар саны белгілі болса, онда мәліметтерді оқу онша қиын емес. Ал, егер мәтіндік файлдағы жазбалар саны белгісіз болса ше, онда не істейміз? Егер сізге орындалатын әрекеттердің саны белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға болатындығын білесіз.2.8.2 тақырыбында мәтіндік файлдардың қасиеттерін сипаттаған болатынбыз, онда файлдың соңына файл соңын көсететін белгі код қойылатыны жайлы айтылған. Олай болса, мәліметтерді оқу файлдың соңы табылғанша жалғаса береді. Егер файл бос болса, яғни онда ешқандай жазба жоқ, онда одан мәліметтерді оқуға болмайды. Осы айтылғандарды тұжырымдай келе, алғы шарт циклін қолдану керек екеніне көзіміз жетті. Файл соңы белгісін анықтау үшін, EOF(Name Var)-процедурасын қолданады ағылшын тілінде EndOf File—файл соңы деген сөзден қысқартылып алынған. Жақшаның ішіне assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOF(Name Var)-процедурасының мәні,  False(жалған)-болады егер файл соңына жетпеген болса  Ture(ақиқат)-болады, егер файлдың соңы анықталған болса. Олай болса, алғы шарт циклін қолданғанда  Not EOF(Fileln)-шарты әзірше ақиқат болса, онда цикл орындала береді, яғни файл соңы анықталғанша. Бұл жағдайда мәліметтерді енгізу процедурасы келесідей болады:

procdure lnit;

var

{айнымалы атауын мәтiдiк файл түрiнде сипаттау}

Fileln:text;

Begin

{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile1.in`);

{файлды оғуға әзiрлеу}

reset(Fileln);

{санауыштын бастапқы мәнi}

Sanau:=0;

Begin

{санауыштын мәнiн бiрге арттыру}

inc(Sanau);

{массивтен элементтердi оқу}

read(Fileln,San[i]);

end;

{файлды жабу}

close(Fileln);

San: arry[1…100] of integer;

 Sanau: byte;

Жазбалар саны белгісіз файлдан мәліметтерді оқу жұмысының дұрыстығын тексеру үшін, оқылған мәліметтер массивін экранға баған түрінде шығарамыз:

procedure exi;

var

i: byte;

begin

for i:=1 to Sanau do

begin

writeln(San[i]);

end;

end;

Егер сіз программа мәтінінің қалған бөлігін дұрыс құрастырыңыз, онда жазбалар саны 100-ден аспайтын мәтіндік файлдан мәліметтерді және жазбалар санын оқитын программа аласыз. Сонымен қатар бұл программа файлдағы барлық жазбалар санын анықтап, оны экранда жазады.

Енді екі өлшемді массив мәліметтерін файлдан қалай оқуға болатындығын қарастырыралық. Жоғарыда айтылғандай мәліметтерді файлдан оқу, оның файл соңын анықтайтын белгісіне байланысты екен. Бірақ екі өлшемді массивтерді жазғанда оның элементтері жол бойынша және баған бойынша жазылады. Сондықтан файлдан мәліметтерді оқығанда, алдымен алғашқы жол бойынша файл соңы белгісі анықталады. Жолдағы мәліметтер толығымен оқылып болған соң келесі жолды оқуды бастау керек. Мәтіндік файлдар қасиеттерін қарастырғанда айтылғандай, онда әрбір жол, жол соңы белгісімен кодымен аяақталады. Осы белгіні анықтау үшін стандартты EOLn(Name Var) процедурасын қолданады.  EOLn(), ағылшын тілінде End of length жол соңы сөзінің қысқартылған түрі. Жақшаның ішіне  assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOLn(Name Var)-процедурасының мәні,  False(жалған)-болады, егер жолдың соңына жетпеген болса,  Ture(ақиқат)-болады егер жолдың соңы анықталған болса. Олай болса мәліметтерді оқу жалғаса береді егер  Not EOF(Fileln) шарты ақиқат болса, яғни жол соңы анықталғанша. Бұл жағдайда мәліметтерді оқу процедурасының түрі келесідей болады:

procedure lnit;

var

i: byte;

{айнымалы атауын мәтiндiк файл түрiнде сипаттау}

Fileln:text;

Begin

{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile5.in`);

{файлды оқуға әзiрлеу}

reset(Fileln);

{жолда санауыштың бастапқы мәнi}

Sanau Jol:=0;

{массив элементтерiн жол бойынша оқу}

while Not EOF (Fileln)do

 begin

{санауыштың мәнiн бiрге арттыру}

inc(Sanau Jol);

{бағанда санауыштың бастапқы мәнi}

SanauBagan:=0;

{массив элементтерiн жол бойынша оқу}

while Not EOF (Fileln)do

begin

{санауыштың мәнiн бiрге арттыру}

inc(Sanau Bagan); 

{массив элементтерiн оқу}

read(Fileln, San[i,j]);

 end;

{курсорды жаңа жолдың басына қою}

read(Fileln, San[i,j]);

end;

{файлды жабу}

close(Fileln);

end;

1.Бір өлшемді массивті құрайтын `MayFile.in` файлынан мәліметтерді оқып, оларды компьютре экранына шығаратын программа жазыңыз және оны `MayFile6.pas` атымен сақтаңыз

«Baribar.kz-тің» Telegram-каналына жазыламыз!