У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Лабораторна робота - Послідовний доступ
4

Лабораторна робота

Тема:

 

Файли.

Послідовний доступ.

Мета роботи: вивчення засобiв мови Сi для обробки файлiв за допомгою послідовного доступу.

Завдання 1: Сформувати файл, що містить інформацію про книги за таким зразком: прізвище автора, назва, рік видання. Використовуючи сформований файл, знайти назви книг даного автора, рік видання. Прізвище автора ввести з клавіатури.

Короткі теоретичні відомості:

Файлом називаїться будь-яка iнформацiя, записана в зовнiшню

(магнiтну) пам'ять. Обмiн даними мiж оперативною та магнiтною пам'яттю вiдбуваїться через спецiально вiдведену для цього частину оперативноє пам'ятi, яка називаїться буферною.

При використаннi файлiв обов'язковими атрибутами програми є:

оголошення, функцiє вiдкриття та закриття файлу, а також функцiє

вводу-виводу. Оголошення файлiв виконуїться так:

FILE *f1,*f2,...,*fn;

Тут *f1,...,*fn -вказувачi на файли, одночасно можна оголосити n

файлiв. Кожному файлу вiдповiдаї свiй вказувач, ця вiдповiднiсть

встановлюїться в момент вiдкриття файлiв.

Нижче приведенi основнi функцiє для роботи з файлами.

f1=FOPEN("iф","тип"); - вiдкриття файлу з iменем iф, призна-

чення йому вказувача f1. Iм'я файлу складаїться з назви та розши-

рення, роздiлених крапкою. Назва може мати до 8-ми лiтер. Розши-

рення маї довжину до трьох букв i в файлах, утворених користува-

чем, необов'язкове. Для задання типу служать символи: r - зчиту-

вання з файлу, w - запис у файл, a - доточування файлу. Функцiя

повертаї значення NULL, якщо при вiдкриттi сталася помилка.

FCLOSE(f1,...,fn); - закриття файлiв. В момент закриття вiд-

буваїться запис у файл залишку буферноє пам'ятi, якщо вiн був

вiдкритий для запису.

FSEEK(f1,n,k); - прямий доступ до файлу, встановлення вказува-

ча файлу, на який вказуї f1. При вводi-виводi контролюїться поточний номер байта, який саме вводиться чи виводиться, вказувачем файлу (лiчильником номера байта в файлi, не путати з вказувачем на файл). Параметр n визначаї на скiльки байтiв слiд змiстити цей вказувач. Параметр k задаї початкову позицiю, вiд якоє потрiбно перемiстити вказувач, вiн може приймати значення:

0 - вiд початку файлу, 1 - вiд поточноє позицiє, 2 - вiд кiнця файлу.

a=FGETC(f1); - читання одного символа з файлу, на який вказуї

f1, присвоїння його значення змiннiй a типу int або char.

FPUTC(a,f1); - запис у файл iз вказувачем f1 одного символа.

FGETS(*s,size,f1); - читання з файлу, на який вказуї f1, рядка

символiв довжиною size байт, який закiнчуїться нулем ('\0'), по-

мiщення цього рядка в оперативну пам'ять, починаючи з адреси s

типу char.

FPUTS(*s,f1); - занесення в файл iз вказувачем f1 лiтерного

рядка, який закiнчуїться нулем i який знаходиться в оперативнiй

пам'ятi, починаючи з адреси s типу char.

FREAD(*r,size,N,f1); - читання з файлу, на який вказуї f1, N

записiв - рядкiв фiксованоє довжини, кожний з яких займаї size

байт, i занесення єх в оперативну пам'ять, починаючи з адреси r.

Записи в файлi повиннi закiнчуватися символом повернення каретки, кiнець рядка, тощо.

FWRITE(*r,size,N,f1); - занесення записiв у файл.

FSCANF(f1,"сф",саз); - форматоване введення, читання з файлу,

який маї вказувач f1, даних, перетворення єх типiв вiдповiдно до

списку форматiв сф i занесення в оперативну пам'ять, задану спис-

ком адрес змiнних саз.

FPRINTF(f1,"сф",сiз); - форматоване виведення, занесення в

файл змiнних, заданих списком сiз.

Всi функцiє читання файлу повертають значення EOF або NULL,

якщо був досягнений кiнець файлу.

Один i той самий файл, створений засобами мови Сi, може бути

використаний для вводу-виводу посимвольно, у виглядi лiтерних

рядкiв змiнноє або фiксованоє (записiв) довжини та форматованих даних. При форматованому вводi-виводi та вводi-виводi записiв

вiдбуваїться перетворення числових даних у лiтернi i навпаки.

Незалежно вiд типiв даних, занесених у файл засобами мови Сi, на магнiтний диск записуються данi лiтерного типу (ASCII-коди).

Програма:

# include <stdio.h>

# include <stdlib.h>

# include <bios.h>

int i;char in[4][40];

/************************************************************/

/* Головна програма */

/************************************************************/

main()

{

clrscr();

CREATE_FILE();

P_4_FILE();

R_4_FILE();

POSHYK();

}

/************************************************************/

/* Функцiя створення файлу */

/************************************************************/

CREATE_FILE()

{

FILE *ff;

char info[4][40]={"Dybovuc V.P. Vushcha matematuka.2004",

"Levchyk L.T. Estetuka. 2006",

"Tumchenko A.A. SAPR. 2000",

"Shushkin V.O. MOSP. 2005"};

if((ff=fopen("abc","w"))==NULL)

{printf("\nПомилка при вiдкриваннi файлу \n");exit(1);}

for(i=0;i<4;i++) fprintf(ff,"%s\n",info[i]);

if(fclose(ff)!=NULL)puts("Помилка при закриттi файлу");

}

/************************************************************/

/* Функцiя посимвольного читання файлу */

/************************************************************/

P_4_FILE()

{

FILE *ff;

char x;

if((ff=fopen("abc","r"))==NULL)

{printf("\nПомилка при вiдкриваннi файлу \n");exit(1);}

printf("Посимвольне читання файлу:\n\n");

while((x=fgetc(ff))!=EOF)printf("%c",x);

if(fclose(ff)!=NULL)puts("Помилка при закриттi файлу");

}

/************************************************************/

/* Читання рядкiв змiнної */

/************************************************************/

R_4_FILE()

{

FILE *ff;

if((ff=fopen("abc","r"))==NULL)

{printf("\nПомилка при вiдкриваннi файлу \n");exit(1);}

printf("\nЧитання рядкiв змiнної довжини:\n\n");

for(i=0;i<4;i++)

{

fgets(in[i],sizeof(in[i]),ff);

printf("%s",in[i]);

}

if(fclose(ff)!=NULL)puts("Помилка при закриттi файлу");

}

/************************************************************/

/* Функцiя пошуку */

/************************************************************/

POSHYK()

{

char z;

printf("\nЩоб перейти до пошуку - нажмiть ENTER");

getch();v:clrscr();

printf("\nВведiть перщу букву прiзвища автора(або '0' щоб вийти):\n");

scanf("%c",&z);

if(z=='0')exit(1);

for(i=0;i<4;i++)

if(in[i][0]==z)printf("Результати пошуку:\n%s",in[i]);

printf("Нажмiть ENTER");

getch();goto v;

}

Таблиця ідентифікаторів:

Ідентифікатор |

Змінна

info[i][j] |

Масив рядків (для запису в файл )

in[i][j]; |

Масив рядків (для читання з файлу)

x | Змінна для посимвольного читання

z | Змінна для порівняння (функція пошуку)

i,j | Параметри циклу

Результати:

Посимвольне читання файлу:

Dybovuc V.P. Vushcha matematuka.2004

Levchyk L.T. Estetuka. 2006

Tumchenko A.A. SAPR. 2000

Shushkin V.O. MOSP. 2005

Читання рядкiв змiнної довжини:

Dybovuc V.P. Vushcha matematuka.2004

Levchyk L.T. Estetuka. 2006

Tumchenko A.A. SAPR. 2000

Shushkin V.O. MOSP. 2005

Щоб перейти до пошуку - нажмiть ENTER

/*Після нажимання клавіші ENTER */

Введiть перщу букву прiзвища автора(або '0' щоб вийти):

T

Результати пошуку:

Tumchenko A.A. SAPR. 2000

Нажмiть ENTER

/*Після нажимання клавіші ENTER */

Введiть перщу букву прiзвища автора(або '0' щоб вийти):

L

Результати пошуку:

Levchyk L.T. Estetuka. 2006

Нажмiть ENTER

/*Після нажимання клавіші ENTER */

Введiть перщу букву прiзвища автора(або '0' щоб вийти):

0

Висновок: Я вивчив засоби мови Сi для обробки файлiв за допомгою послідовного доступу.