reforef.ru 1
Деректердің файлдық типтері. Файлдармен жұмыс істеу


Файлдық тип, сыртқы тасымалдаушыда орналасқан бір типтегі компоненттер тізбегінен тұратын Паскаль тіліндегі мәліметтер болып табылады. Ондағы компоненттердің типі файлдық типтен басқа кез-келген бола алады. Паскальда файлдық типтегі айнымалылар ақпаратты енгізу-шығару үшін қолданылады. Ақпаратты енгізу-шығару алдында файлдық айнымалы assign процедурасының көмегімен сыртқы файлмен байланысқан болуы файлды оқу немесе оған жазу үшін ол ашық болуы керек. Сонан соң енгізу-шығаруды орындауға болады.

Файлдардың 3 тобы анықталған: текстік (тип text), типтік (file of <тип>), типтік емес (file). Олармен жұмыс істеу бір-бірінен ерекшеленеді.

Әдетте барлық файлдарды тізбектей, ретпен ену мүмкіндігіне ие файлдар дейді. Көңіл аударыңыз: seek процедурасының көмегімен типтік және типтік емес файлдар үшін ретсіз ену режимін орнатуға болады. Бұл кезде файл компоненттерін нөмірлеу нөлден басталады. Жұмыс аяқталған соң файл close процедурасымен жабылуы тиіс.

Барлық файлдар үшін қолданылатын стандартты процедуралар мен функциялар:

assign (f, name) - Файлдық айнымалы f–ті сыртқы name файлымен байланыстыру.

chdir (path) - Ағымдағы директорияны өзгерту.

close (f) - Ашылған файлды жабу.

erase (f) - Сыртқы файлды жою.

mkdir (path) - Каталог құру.

rename (f, new) - Сыртқы файлдың атын өзгерту.

reset (f[, size]) - Алдын-ала бар файлды ашу.

rewrite (f[, size]) - Бос, жаңа файл ашу. Оған процедурасында көрсетілген атау беріледі. Егер ондай файл бар болса, онда ол файл өшіріледі.

rmdir (path) - Бос каталогты жою.

eof (f) - Файл соңы.

Текстік файлдар жолдарға бөлінген символдар жиынтығынан тұрады. Әрбір жолдың соңында жол соңын білдіретін белгі болады. Текстік файлдармен жұмыс істеу ерекшелігі мынада: мәндері read немесе write процедуралары арқылы енгізілетін және шығарылатын файлдар char немесе string типтерімен қатар жай типтердің бірінде: бүтін, нақты, логикалық (тек жауапқа шығаруда) бола алады.


Бұл процедуралар ASCII –жолдармен де жұмыс істей алады.

Текстік файлдар үшін, программаны іске қосқанда автоматты түрде ашылатын және жұмыс соңында автоматты түрде жабылатын екі стандартты файлдық айнымалы бар. Олар: INPUT -клавиатурамен байланыс; OUTPUT -дисплей экранымен байланыс.

Егер text типіндегі файлдармен жұмыс барысында файлдық айнымалы көрсетілмесе, онда файлдық айнымалы INPUT немесе OUTPUT қолданылуда деп есептейді. Текстік файлды оқу үшін reset процедурасымен, не оған жазу үшін rewrite
немесе append процедураларының бірімен ашу керек.

1. Мәтіндік файлдар

Текстік файлдармен жұмыс істейтін процедуралар мен функциялардың сипаттамалары:

append (f) - Файлды ашу және соңына жаңа ақпараттар енгізу.

read (f, <тізім>)- Файлдан оқу.

readln (f, <тізім>) – Файлдан жолдарды оқу.

write (f, <тізім>) – Файлға жазу.

writeln (f, <тізім>) – Файлға жолдарды жазу.

eoln (f)- Файл жолының соңы.

seekeof (f)- Файл соңы.

seekeoln (f) - Файл жолының соңы.

2. Типтік файлдар

Типтік файлдармен жұмыс істегенде мынадай қосымша процедуралар мен функциялар қолданылады:

read (f, <тізім>) – Файлдан типтері көрсетілген компоненттерді оқу.

seek (f, num) - Файлдың нөмірі көрсетілген компонентіне орналастыру.

truncate (f) - Ағымдағы компоненттен бастап файлдың бөлігін жою.

write (f, <тізім>) - Типтері көрсетілген компоненттерді файлға жазу.

filepos (f) - Файлдың ағымдағы компонентінің номері.

filesize (f) - Файлдың ағымдағы компонентінің өлшемі.

3.Типтік емес файлдар

Типтік емес файлдармен жұмыс істегенде мынадай қосымша процедуралар мен функциялар қолданылады:

blockread (f, buf, n [,result])- Файлдан компоненттерді оқу.


seek (f, num) - Файлдың номері көрсетілген қажетті компонентіне орнату.

truncate (f) - Ағымдағы компоненттен бастап файлдың бөлігін жою?

blockwrite (f, buf, n[, result]) - Типтері көрсетілген компоненттерді файлға жазу.

filepos (f) - Файлдың ағымдағы компонентінің номері.

filesize (f) - Файлдың ағымдағы компонентінің өлшемі.

Бірнеше мысалдар қарастырайық. Мазмұны мына суретте көрсетілгендей екі файл берілсін.

Файл аты: Asan

Файл аты: Murat

1 3 5 6 7 8

2 4 4 4

3 2 6 2 2

4 3 3 3 3 3 3

5 7 7 7 7 7 7

6 9 9 5 9 9 9

7

3

1

Ata Ana Ara Sana

Almaty

A s t a n a

Kazahstan

1-есеп. Әрбір элементін еселеу арқылы Asan файлын оқу.

Бұл есепті шешу үшін енгізу және шығару файлдарын текстік файл ретінде сипаттаймыз. Asan файлы алдын-ала құрылып, мәліметтермен толтырылған. Оны файлдық айнымалы f1-мен байланыстырамыз да, оқу үшін ашамыз.

Assign(f1, ‘Asan’);

Reset (f1);

F2 айнымалысын бос жолдың көмегімен стандартты шығару құрылғысымен (дисплей экранына) байланыстырамыз және оны жауапқа шығарамыз.

assign (f2, ‘’);

rewrite (f2);

Дисплей орнына dos форматындағы кез-келген файлдың атын көрсетуге болады. Сонан соң f1 файлының элементтерін оқитын және оларды бос орын арқылы f2 файлына жазатын цикл ұйымдастырамыз. Ол цикл eof(f1) функциясының көмегімен f1 файлының соңы табылғанша орындалады. Жұмыс соңында екі файлды да жабамыз.

program prog_1;

var f1, f2 : text; x : char;

begin

assign (f1, ‘c:\ e\one’); {Файл орналасқан орынды көрсету}


reset(f1);

assign(f2,‘’);

rewrite(f2);

while not eof(f1) do

begin

read(f1, x);

write(f2, x+ ‘’+x)

end;

writeln;

close(f1); close(f2)

end.

Айнымалылар: f1, f2 – текстік файлдар; x – файл элементі.

Өңделген Asan файлы мына түрде жауапқа шығарылады. Әрбір символ бос орын арқылы еселенеді.

1 1 3 3 3 3 5 5 6 6 7 7 8 8

2 2 4 4 4 4 4 4

3 3 2 2 6 6 2 2 2 2

4 4 3 3 3 3 3 3 3 3 3 3 3 3

5 5 7 7 7 7 7 7 7 7 7 7 7 7

6 6 9 9 9 9 5 5 9 9 9 9 9 9

7 7

3 3

1 1

2-есеп. «а» әрпін еселеу арқылы Murat файлын оқыңдар.

program prog_2;

var f1, f2 : text; x : char;

begin

assign(f1, ‘Murat’);

reset(f1);

assign(f2, ‘ ‘);

rewrite(f2);

while not eof(f1) do

begin

read(f1, x);

if (x = ‘a’) or (x = ‘a’) then write(f2, x+x)

else write(f2, x)

end;

writeln;

close(f1);

close(f2)

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Murat файлын f1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

4. f1 файлының элементтерін оқитын және оларды f2 файлына жазатын цикл ұйымдастырамыз. Ол цикл eof(f1) функциясының көмегімен f1 файлының соңы табылғанша орындалады.

5. Егер «А» немесе «а» әрпі кездессе ол жазу кезінде еселенеді.

6. Екі файлды да жабамыз.


Айнымалылар:

F1, f2 -текстік файлдар;

х – файл элементі.

Өңделген файлы мына түрде жауапқа шығарылады. Әрбір «а» немесе «А» әрпі екі рет жазылады.


AAtaa AAnaa AAraa Saanaa

AAlmaaty

AA s t aa n aa

Kaazaahstaan


3-есеп. Файлын оқыңдар және «а» әрпін санаңдар.

program prog_3;

var f1 : text;

x : char;

k : integer;

begin

k = 0;

assing(f1, 'Murat');

reset(f1);

while not eof(f1) do

begin

read(f1, x);

if (x='a') or (x='a') then k :=k+1;

end;

writeln('a әрпінің саны:=', k);

close(f1);

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Murat файлын f1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f1 файлының элементтерін оқитын және «а» әрпін санайтын цикл ұйымдастырамыз. Ол цикл, eof(f1) функциясының көмегімен f1 файлының соңы табылғанша орындалады.

4. Нәтижені жауапқа шығарамыз.

5. Файлды жабамыз.

Айнымалылар:

f1, f2 - текстік файлдар;

х – файл элементі;

к – әріптің санын анықтау.

Жұмыс нәтижесі:

А әрпінің саны:=16.

4-есеп. Asan файлын оқыңдар және онда кездесетін цифрлардың қосындысын табыңдар.

Бұл есептегі текстік файлдың элементтерінің сандық мәнін анықтау үшін символдардың реттелген типке жатаныдығын пайдалануға болады. Цифрлардың ascii коды бірінен соң бірі орналасқан. Сондықтан кез-келген цифрдың мәнін былай анықтауға болады:

K := ord(x)-ord(‘0’);


program prog_4;

var f1 : text; x : char;

k, sum : integer;

begin

sum :=0;

assign(f1, ‘Asan’); reset(f1);

while not eof(f1) do

begin

read(f1, x);

if (x> = ‘0’) and (x<=‘9’) then

begin

k := ord(x)-ord(‘0’);

sum := sum+k

end;

end;

writeln(‘sum = :’, sum);

close(f1);

end.
Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Asan файлын f1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f1 файлының элементтерін оқитын және цифрлардың қосындысын анықтайтын цикл ұйымдастырамыз. Ол цикл, eof(f1) функциясының көмегімен f1 файлының соңы табылғанша орындалады.

4. Нәтижені жауапқа шығарамыз.

5. Файлды жабамыз.

Айнымалылар:

f1, f2 -текстік файлдар; х –файл элементі;

k – көмекші айнымалы; sum – цифрлар қосындысы.

Жұмыс нәтижесі:

sum:=195

5-есеп. Murat файлының элементтерін өзіне-өзін екі рет жазыңдар.

Бұл жағдайда файлды екі рнет ашпау үшін, қажетті элементке орналастыру seek(f1, 0) процедурасын пайдаланамыз, яғни оның көмегімен f1 файлдың басына ораламыз. Бұл процедурамен жұмыс істеу үшін f1 файлдың типін, мысалы символдар файлы ретінде көрсету керек.

program prog_5;

var f1 : file of char; f2 : text;

x : char; i : integer;

begin

assign(f1, 'Murat')

reset(f1);

assign(f2, ' ');

rewrite(f2);

for i := 1 to 2 do begin

while not eof(f1) do

begin

read(f1, x);

write(f2, x);

end;

writeln;

seek(f1, 0) end;

writeln;

close(f1);


close(f2)

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Murat файлын f1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

4. f1 файлының элементтерін оқу және оларды f2 файлына жазу үшін екі рет көру мүмкіндігін ұйымдастырамыз.

5. Екі файлды да жабамыз.

Айнымалылар:

f1 –символдар файлы; f2- текстік файл ;

x –файл элементі; k – көмекші айнымалы.


Ata Ana Ara Sana Almaty A s t a n a Kasahstan

Ata Ana Ara Sana Almaty A s t a n a Kasahstan

6-есеп. Murat файлын оқыңдар және соңынан басына қарай жауапқа шығарыңдар.

Файлды көру үшін, тек типтік файлдарға қолданылатын файлдың ұзындығын анықтайтын filesize(f1) функциясын пайдаланамыз. Бұл кезде файлдың ұзындығы файл соңындағы символмен анықталады. Бұл символды назардан тыс қалдыру керек.

program prog_6;

var f1 : file of char;

f2 : text;

x : char;

t, i : integer;

begin

assign(f1, 'Murat');

reset(f1);

assign(f2, ' ');

rewrite(f2);

t :=filesize(f1);

for і:=t-1 downto 0 do

begin

seek(f1, i);

read(f1, x); write(f2, x)

end;

writeln; close(f1); close(f2)

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.


2. Murat файлын f1 файлдық айнымалымен байланыстырамыз да оны оқу үшін ашамыз.

3. f2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

4. f1 файлының элементтерін соңынан кері оқуды және оларды f2 файлына жазуды ұйымдастырамыз.

5. Екі файлды да жабамыз.

Айнымалылар:

f1- символдар файлы; f2- текстік файл;

x – файл элементі; t – файл ұзындығы; i – цикл параметрі.


natshazaK a n a t s A ytamlA anaS arA anA atA

7-есеп. Murat файлын өзінезін соңынан басына қарай жазылған түрде тізбектей жазуды құрыңдар.

program prog_7;

var f1 : file of char;

f2 : text; x : char;

t, i : integer;

begin

assing(f1, 'Murat');

reset(f1);

assing(f2, ' ');

rewrite(f2);

t:=filesize(f1);

while not eof(f1) do

begin

read(f1, x); write(f2, x)

end;

writeln;

for i := t - 1 downto 0 do

begin

seek(f1, i); read(f1, x);

write(f2, x)

end;

writeln;

close(f1);

close(f2)

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Murat файлын f1файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

4. f1 файлының элементтерін оқу үшін екі рет тізбектей көруді (бірінші көру-басынан соңына дейін, ал екіншісі соңынан басына дейін) және оларды f2 файлына жазуды ұйымдастырамыз.


5. Екі файлды да жазамыз.

Айнымалылар:

f1- символдар файлы;

f2 – текстік файл;

x – файл элементі;

t – файл ұзындығы;

i – цикл параметрі.

Жұмыс нәтижесі:


Ata Ana Ara Sana Almaty A s t a n a Kazahstan

NatshazaK a n a t s A ytamlA anaS arA anA atA

8-есеп. Murat файлында бірінші нүктеден кейінгі сөздерді жойыңдар.

Бұл бағдарламада көрсетілген позициядан бастап файлдың бір бөлігін жою үшін truncate(f1) функциясын пайдаланамыз.

program prog_8;

var f1 : file of char; f2 : text;

x : char; k : integer;

begin

assing(f1, 'Murat'); reset(f1);

assing(f2, ' '); rewrite(f2);

k :=-1;

while not eof(f1) do

begin

k := k+1;

read(f1, x);

if x<>'.' then write(f2, x);

else begin

seek{f1, k+1);

write(f2, x);

truncate(f1)

end;

end;

writeln;

close(f1);

close(f2)

end.

Есепті шешу алгоритмі:

1. Бағдарлама денесін айнымалыларды сипаттаудан бастаймыз.

2. Murat файлын f1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

3. f2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

4. f1 файлының элементтерін тізбектей көруді және оларды бірінші нүктеге дейін f2 файлына жазуды ұйымдастырамыз.

5. Келесі позициядан бастап файлдың қалдық бөлігін жоямыз.

6. Екі файлды да жабамыз.

Айнымалылар:

f1 – символдар файлы;

f2 –текстік файл;

x – файл элементі;

t – файл ұзындығы;

k – көмекші айнымалы.

Жұмыс нәтижесі:

Ata Ana Ara Sana Almaty A s t a n a