Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Обмін блоками даних

 

Функціїfread() та fwrite (). Зчитати з потоку блок даних заданого розміру можна за допомогою функції

 

size_t fread (void* buf, size_t size, size_t n, FILE* fp);

 

що заносить у буфер, адресу якого задає параметр buf, n об'єктів, кожен з яких має розмір size. Тип size_t оголошено в <stdio.h> через декларацію typedef. У Borland C він збігається з типом unsigned int.

Функція fread () повертає кількість реально зчитаних об'єктів (не байтів). Якщо ця величина не дорівнює заданому значенню n, то це означає, що досягнуто кінця файлу або зафіксовано помилку читання. Уточнити причину неповного зчитування блоку можна за допомогою функцій feof () та ferror (), які опишемо далі.

 

Використання функції fread () проілюструємо прикладом програми, яка визначає середньоарифметичне значення набору дійсних чисел, бінарні коди яких зберігаються у файлі attempj.dat, зареєстрованому в каталозі C:\EXPRDATA. Дані з файлу зчитуються в буфер блоками по N чисел. Процес роботи з файлом завершується, коли розмір зчитаного блоку менший за N, що сигналізує про досягнення кінця файлу.


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

/* Визначення середньоарифметичного значення послідовності */

/* дійсних чисел, що зберігається у заданому бінарному файлі */

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

#include <stdio.h>

#define N 1000 /* розмір блоку даних */

double buf[N];

int main (void)

{

FILE *fd;

char fname[]="C:\\EXPRDATA\\attempj.dat";

double sum;

unsigned n, k, i;

if ( (fd=f open (fname, "rb") )== NULL) /* бінарний режим обміну */

{ printf("\n\t Файл %s не знайдено \n", fname);

return 0;

}

 

sum=0; k=0; /* сума і кількість введених з файлу чисел */

do {

n = fread(buf, sizeof(double), N, fd) ;

k+=n;

 

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

sum+=buf[i]; /* сумування чисел введеного блоку */

} while (n == N);

printf("\n Середнє значення %u елементів файла %s => %.31f\n",

k, fname, sum/k);

fclose (f);

return 0; }

 

Запис блоку даних у потік виконує функція

 

size_t fwrite (void* buf, size_t size, size_t n, FILE* fp);

 

Параметри цієї функції такі ж, як і в функції fread(): buf - вказівник на ділянку оперативної пам'яті, звідки зчитуються дані; size - розмір одного даного; n - кількість даних, що мають бути записані у файл (потік); fp - вказівник потоку виведення.

 


Функціїgetw() та putw(). Бібліотека системи програмування Borland C додатково включає дві функції: getw () і putw (). Перша з них призначена для зчитування з бінарного файлу двобайтового двійкового коду цілого числа. Друга функція записує в файл, відкритий у бінарному режимі, внутрішній двійковий код заданого цілочислового значення. Ці функції оголошені в <stdio. h> наступним чином:

 

int getw (FILE* fp);

int putw (int numb, FILE* fp);

 

У разі успішного виконання обидві функції повертають значення зчитаного або відповідно записаного числа, а в разі виникнення помилки - макроконстанту EOF.

Подана нижче функція FindNumber () здійснює пошук заданого числа number у відкритому файлі, заповненому бінарними кодами цілих чисел. Пошук розпочинається з поточної позиції файлу. Функція повертає порядковий номер number або 0, якщо такого числа у файлі немає (припускаємо, що number не дорівнюватиме EOF).

 


 

Приклад:

 

/* Функція пошуку заданого цілого числа в бінарному файлі */

 

long FindNumber (FILE* fb, int number)

{ int rnum; long k = 0;

do {

rnum = getw(fb); k++; /* зчитування числа */

if (rnum == number)

return k; /* число знайдено */

 

} while (rnum !=EOF);

return 0; /* задане число відсутнє */

 

}

 



Читайте також:

  1. Автоматичний обмін даними.
  2. АДАПТАЦІЯ ОБМІНУ РЕЧОВИН ДО М'ЯЗОВОЇ ДІЯЛЬНОСТІ
  3. Американський стандартний код для обміну інформацією ASCII.
  4. Аналіз паралельного інтерейсу з DSP-процесорами: запис даних в ЦАП, що під’єднаний до адресного простору пам’яті
  5. Аналіз паралельного інтерфейсу з DSP-процесорами: читання даних з АЦП, що під’єднаний до адресного простору пам’яті
  6. Аналіз статистичних даних про склад та плинність кадрів, які обіймали керівні
  7. Аналіз та інтерпретація одержаних даних
  8. Архіватори даних.
  9. Архітектура баз даних
  10. Аудит розрахунків за відшкодуванням завданих збитків
  11. Бази даних АС ДЗК
  12. Бази даних як засіб зберігання й обробки інформації




Переглядів: 740

<== попередня сторінка | наступна сторінка ==>
Файловий обмін рядками символів | Форматне введення/виведення даних

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.