Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Приклад. Обробка бінарних файлів




Обробка бінарних файлів

Обробка текстових файлів

Типовий алгоритм обробки текстових файлів:

1. Відкриття файлу: fopen();

2. Читання або запис рядків у файл: fgets(), fputs();

3. Закриття файлу: fclose().

 

fopen()

FILE *fopen(const char *ім’я_файлу, const char *режим);

Режими відкриття файлу наведені у таблиці.

Режим Опис Файлу нема
r відкрити файл для читання помилка
w створити файл для запису створюється
a додати у кінець файлу створюється
r+ відкрити файл для читання/запису помилка
w+ створити файл для читання/запису створюється
a+ додати у кінець файлу або створити файл для читання/запису створюється

fopen() повертає вказівник на файл, або у випадку помилки – пустий вказівник (NULL), наприклад:

FILE *fp;

fp = fopen(“test”, “r”);

if (fp == NULL)

printf(“Помилка при відкриті файлу.”);

 

fclose()

int fclose(FILE *уф);

Закриває файл.

 

fgets()

char *fgets(char *str, int довжина, FILE *уф);

Читає з потоку *уф символи та розміщує їх у рядку str. Символи читаються до досягнення одної з ознак:

– новий рядок;

– кінець файлу;

– вказана довжина.

fputs()

int fputs(const char *str, FILE *уф);

Записує у потік *уф зміст рядку str.

feof()

int feof(FILE *уф);

Якщо вказівник поточної позиції файлу встановлений у кінець, повертає не нульове значення, нуль – в противному випадку.

 

Приклад 1. Виведення змісту текстового файлу на екран.

FILE *fp;

char str[200];

fp = fopen(“test”, “r”);

if (fp == NULL) {

printf(“Error”);

exit(1);

};

 

while (feof(fp) == 0) {

fgets(str, 199, fp);

puts(str);

}

 

fclose(fp);

 

Типовий алгоритм обробки бінарних файлів:

1. Відкриття файлу: fopen();

2. Читання або запис даних у файл: fread(), fwrite();

3. Зміна позиції вказівника поточної позиції файлу: fseek(), ftell(), rewind();

4. Закриття файлу: fclose().

Функції fopen() та fclose() були описані вище.

fread()

size_t fread(void *buffer, size_t кільк_байт,
size_t кількість, FILE * уф);

Дозволяє зчитувати з файлу блоки даних будь-якого типу.

buffer – вказівник на область пам’яті, куди зчитуються дані
з файлу, це може бути вказівник на будь-яку змінну у програмі;

кільк_байт – розмір елементу даних у байтах;

кількість – кількість елементів, яку треба зчитати. Кожний елемент займає кільк_байт байтів.

Функція повертає кількість зчитаних елементів. Якщо досягнуто кінець файлу, це значення може бути меншим ніж кількість.

Розмір елементу даних у байтах визначається за допомогою операції sizeof. Для визначення розмір типу, його ім’я необхідно вказувати у дужках. Допускається також вказування у дужках імені змінної.

int sz, i;

char ch;

sz = sizeof i; /* sz = 2 bytes */

sz = sizeof(ch); /* sz = 1 byte */

sz = sizeof(float); /* sz = 4 bytes */

 

Приклад 2. У файлі data.dat зберігаються цілі числа. Зчитати та вивести на екран усі числа, більші 10.

#include<stdio.h>

 

void main()

{

FILE *fp;

int i, sz = sizeof(int);

 

fp = fopen("data.dat", "rb");

if (fp == NULL) {

puts("Cannot open file");

exit(1);

}

 

while (fread(&i, sz, 1, fp) == 1) {

if(i > 10)

printf("%d\n", i);

}

 

fclose(fp);

}

 

fwrite()

size_t fwrite(void *buffer, size_t кільк_байт,
size_t кількість, FILE * уф);

Дозволяє записувати у файли блоки даних будь-якого типу.

*buffer – вказівник на область пам’яті, куди зчитуються дані з файлу,

кільк_байт – розмір елементу даних у байтах,

кількість – кількість елементів, яку треба зчитати.

Приклад 3. Записати 10 випадкових цілих чисел до файлу data.dat.

#include<stdio.h>

#include<stdlib.h>

 

void main()

{

FILE *fp;

int i, n, sz = sizeof(int);

 

fp = fopen("data.dat", "wb");

if (fp == NULL) {

puts("Cannot create file");

exit(1);

}

 

srand(100);

for(i = 0; i < 10; i++){

n = rand();

fwrite(&n, sz, 1, fp);

}

 

fclose(fp);

}

 

fseek()

int fseek(FILE * уф, long int кільк_байт, int початок_відліку);

Встановлює вказівник поточної позиції файлу. Читання або запис даних у файл виконується на поточної позиції. Після файлової операції вказівник переміщується на наступну позицію.

кільк_байт – кількість байтів від початку відліку, що визначає нову позицію вказівника;

початок_відліку – визначає позицію відліку:
початок файлу SEEK_SET,
поточна позиція SEEK_CUR,
кінець файлу SEEK_END.

Функція повертає нуль, якщо виконана успішно, або не нульове значення у випадку помилки.

 

ftell()

long int ftell(FILE *уф);

Повертає позицію вказівника поточної позиції файлу.

rewind()

void rewind(FILE *уф);

Переміщує вказівник поточної позиції файлу на початок файлу.

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 497; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.