Обмін блоками даних Зчитати з потоку блок даних заданого розміру можна за допомогою функції size t fread (void *buf, size t size, size t n, FILE *fp);

Презентация:



Advertisements
Похожие презентации
Обмін блоками даних Зчитати з потоку блок даних заданого розміру можна за допомогою функції size t fread (void *buf, size t size, size t n, FILE *fp);
Advertisements

Вказівники Вказівник (або покажчик) – особливий тип даних, значенням якого є адреса певного байта оперативної памяті. Значення покажчика - це беззнакове.
Обмін даними з файлами У компілятор мови С не включено спецзасобів для введення/виведення даних, тому обмін даними реалізовано через бібліотечні функції.
Функції потокового введення/виведення даних Виділяють чотири групи функцій високорівневого обміну відповідно до формату даних, що передаються за одну операцію:
Функції з неоголошеними параметрами Інколи у функції потрібно передати деяке число фіксованих параметрів та невизначене число додаткових. В цьому випадку.
Опрацювання структур у функціях Оскільки мова С інтерпретує структури як звичайні змінні, а не вказівники, можна передавати значення структури у функцію.
Класи пам'яті даних. Клас пам'яті, час існування та видимість об'єкта Кожен обєкт програми (змінна, функція,...) має свій тип і клас памяті. Тип визначає.
Текстові файли Приклади використання. Текстові файли призначені для зберігання символів Для опису текстової файлової змінної використовується тип Text.
Консольне введення даних За призначенням клавіші клавіатури можна поділити на групи: – символьні; – клавіші керування: Home, End, …, Delete та чотири стрілки;
ПРОФІЛЬНА ІНФОРМАТИКА 10 КЛАС Масиви. Створення консольних проектів у C#
Работа с файлами FILE НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
Цикли в мові С++ Цикл - це процес виконання певного набору команд деяку кількість разів.
Maque.org.ua Adobe ActionScript 3.0 підтримує: Булев (Boolean) Ціле число (int) Неініційована змінна (Null) Число (Number) Рядок або стрічка (String)
Програмування на мові Паскаль Тема Цикли. Цикли Цикл – це багатократне виконання однакової послідовності дій. цикл з відомою кількістю кроків цикл з невідомою.
Мета уроку : повторити вивчений матеріал по темі «Функція»; вивчити поняття області визначення та області значень функції;навчитися шукати область визначення.
Типи даних мови Visual Basic та їх опис. Опис величин Величина - це об'єкт, який має стале або змінне значення. Основні характеристики величин: ім'я,
Вказівники, масиви. Структури Проф. Куссуль Н.М..
Вказівники на функції В мові С імя функції є константним вказівником на перший байт виконавчого коду функції. Це адреса оперативної памяті, яка відповідає.
Функція Функція – залежність змінної у від змінної х, якщо кожному значенню змінної х відповідає єдине значення змінної у.
Обробка символьних рядків в мові С++. План 1.Загальні відомості про рядковий тип даних. 2.Рядок як параметр функції.
Транксрипт:

Обмін блоками даних Зчитати з потоку блок даних заданого розміру можна за допомогою функції size_t fread (void *buf, size_t size, size_t n, FILE *fp); що заносить у буфер n обєктів розміром size. Тип size_t typedef. Borland C int. оголошено в через декларацію typedef. У Borland C він збігається з типом int. Функція повертає кількість реально зчитаних обєктів. Розглянемо приклад визначеня середньоарифметичного значення дійсних чисел, бінарні коди яких зберігаються у файлі. Дані зчитуються в буфер блоками по N чисел. Робота завершується коли розмір зчитаного блоку менший за N, що сигналізує про досягнення кінця файла.

#include #include #define fname "sum.xz" #define N 100 void main() void main() { int a[N], n, i; int a[N], n, i; float s=0, k=0; float s=0, k=0; FILE *f; FILE *f; f =fopen ( fname, "rb"); f =fopen ( fname, "rb");

do { { n=fread (a, sizeof(int), N, f); n=fread (a, sizeof(int), N, f); for (i=0; i<n; i++) for (i=0; i<n; i++) s+=a[i]; s+=a[i]; k+=n; k+=n; } } while (n==N); while (n==N); printf ("sr=%4.2f", s/k); printf ("sr=%4.2f", s/k); fclose(f); fclose(f); }

Запис блоку даних у потік виконує функція size_t fwrite (void *buf, size_t size, size_t n, FILE *fp); Параметри такі ж, як і в функції fread(). Borland C Бібліотека Borland C додатково включає функції int getw (FILE *fp); int putw (int numb, FILE *fp); Функції повертають значення зчитаного або записаного в бінарний файл двобайтового двійкового коду цілого числа. Приклад: знаходження номера заданого числа в даному бінарному файлі

#include #include long Find(FILE *f, int n) { long k=1,N; long k=1,N; do { if (N=getw(f)==n) return k; if (N=getw(f)==n) return k; k++; k++; } while (N!=EOF); } while (N!=EOF); return 0; return 0;} void main() { FILE *f=fopen(prog.xz,rb); FILE *f=fopen(prog.xz,rb); printf(%d,Find(f,5)); printf(%d,Find(f,5)); fclose(f); fclose(f);}

Бінарні файли мають переваги, порівняно з текстовими при зберіганні числових даних. Операції читання і запису з такими файлами виконуються швидше, так як відсутня необхідність форматування (переведення в текстове представлення та навпаки). Двійкові файли зазвичай мають менший розмір, ніж аналогічні текстові файли. В двійкових файлах можна переміщуватися в будь-яку позицію і читати або записувати дані в довільній послідовності, в той час, як в текстових файлах практично завжди виконується послідовна обробка інформації. Робота з бінарними файлами

#include #include struct mystruct { int i; char ch; }; int main(void) { FILE *stream; struct mystruct s; if ((stream = fopen("test.dan", "wb")) == NULL) { fprintf(stderr, "Неможливо відкрити файл\n"); return 1; } s.i = 0; s.ch = 'A'; fwrite(&s, sizeof(s), 1, stream); fclose(stream); return 0; }

Для організації читання даних з файлу в довільному порядку використовується "покажчик файла" (курсор), який визначає поточну позицію у файлі. При читанні даних курсор автоматично зміщується на число прочитаних байтів. Отримати поточну позицію курсору файла можна за допомогою функції ftell() long ftell (FILE *stream); Встановлюється поточна позиція курсору у файлі за допомогою функції fseek(): int fseek (FILE *stream, long offset, int whence); Ця функція задає зміщення на число байтів offset від точки відліку, яка визначається параметром whence. Цей параметр може приймати значення 0, 1, 2.

КонстантаwhenceТочка відліку SEEK_SET0Початок файлу SEEK_CUR1Поточна позиція SEEK_END2Кінець файлу Можливі значення параметра whence функції fseek Якщо задане значення whence=1, то offset може приймати як додатне, так і від'ємне значення, тобто зсув вперед або назад. Функція rewind() переміщує курсор на початок файлу void rewind (FILE *stream); Те ж саме можна зробити за допомогою fseek() fseek (stream, 0L, SEEK_SET); Встановлення покажчика перед 10-м елементом від кінця файла: fseek (f, -10*sizeof(double), SEEK_END); Встановлення покажчика перед 10-м елементом від кінця файла: fseek (f, -10*sizeof(double), SEEK_END);

Приклад визначення розміру файлу #include long filesize (FILE *stream); int main (void) { FILE *stream; stream = fopen("test.dan ", "wb+"); printf("Розмір файла test.dan рівний %ld байт\n", filesize(stream)); fclose(stream); return 0; }

long filesize (FILE *stream) { long curpos, length; curpos = ftell (stream); /*збереження поточної позиції файла*/ fseek (stream, 0L, SEEK_END); /*перехід у кінець*/ length = ftell (stream); /*розмір відповідає зміщенню*/ fseek (stream, curpos, SEEK_SET); /*повернення покажчика на попередню позицію*/ return length; }