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


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


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


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


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


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


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


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


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


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



Посимвольний обмін даними

Функції потокового введення/виведення даних

 

Функції високорівневого обміну даними з файлами можна поділити на чотири групи відповідно до формату даних, що передаються за одну операцію читання/запису:

 

• функції посимвольного введення/виведення;

• функції рядкового введення/виведення;

• функції блокового введення/виведення;

• функції форматного введення/виведення.

 

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

 


 

Введення одного символу. Основною функцією зчитування одного символу з потоку введення fp є функція

int fgetc (FILE* fp);

У разі успішного виконання функція fgetc () повертає код зчитаного символу як значення з типом unsigned char, розширене до формату int. Якщо ж читання з потоку недоступне, зокрема через досягнення кінця файлу, то функція повертає макро-константу EOF.

 

Такі ж дії виконує функція

int getc (FILE* fp);

яку в середовищі Borland C та в ряді інших систем програмування оголошено як макрос, що викликає функцію fgetc ().

Якщо параметром названих функцій є стандартний потік введення stdin, то їх дія повністю збігається з дією функцій введення символів з клавіатури fgetchar () і getchar (). Результат виклику кожної з чотирьох наступних функцій однаковий:

 

fgetc(stdin) = getc(stdin) = fgetchar() = getchar();

 

- зчитування одного символа, введеного з клавіатури і записаного в буфер стандартного потоку введення (якщо потік stdin попередньо не перескерували).


Функція

int ungetc (int symb, FILE* fp);

дає змогу повернути в потік введення fp останній зчитаний символ. Після повернення symb стає першим символом потоку, його буде зчитано довільною наступною операцією введення. Функція ungetc () повертає код символа symb у разі успішного завершення, а у разі невдачі - значення EOF.

Наведемо приклад функції, яка реалізує зчитування послідовності цифрових символів зі заданого відкритого потоку frd та запис введених цифр за адресою numbst. Робота функції завершується, коли зчитується символ, який не є цифрою - цей символ функція повертає назад у потік.

 

/* Функція введення послідовності цифрових символів */

#include <stdio.h>

#include <ctype.h>

char* ReadNumber (char* numbst, FILE* frd)

{ char * pn = numbst;

int symb;

while (isdigit (symb = getc( frd))) /* isdigit – повертає числові значення 0 - 9

*pn++ = symb; /* запис цифрових символів у numbst

*pn = '\0'; /* кінець числового рядка

ungetc (symb, frd); /* повернення нечислового символа

return numbst;

}


 

Запис символа у файл. Запис заданого символа symb у потік виведення fp виконують функції

 

int fputc (int symb, FILE* fp);

та

int putc (int symb, FILE* fp);

 

Другу з цих функцій у Borland C реалізовано як макрос. Обидві функції за умови успішного виконання повертають код записаного символу. У разі помилки звертання до файлу функції повертають значення макроконстанти EOF.

 

Проілюструємо використання функцій посимвольного потокового введення ведення прикладом програми, яка відображає на екрані весь вміст текстового файлу

 


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

/* Посимвольне виведення вмісту заданого файлу */

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

#include <stdio.h>

#include <string.h>

int main (int argc, char** argv)

{

FILE * fp;

char fname[50];

int c;

if (argc == l) { /* ім'я файла у командному рядку не задано */

printf("Ім\'я файла: ");

gets(fname); }

else

strcpy(fname, argv[1]); /* ім'я зчитується з командного рядка */

fp = fopen(fname,"r");

if (fp == NULL) {

printf ("Хибне ім\'я файла - %s \n", fname);

return 0; }

while ((c = getc(fp) ) != EOF) /* цикл зчитування файла */

putc(c, stdout); /* посимвольне відображення на екрані */

fclose(fp);

return 0; }


Наведена вище програма дає змогу задати ім'я файлу з командного рядка або ввести його в процесі виконання програми. Хоча зчитування файлу здійснюється посимвольно, все ж програма забезпечує високу швидкодію обміну, оскільки реально символи зчитуються не з файлу на зовнішньому носії, а з буфера введення в оперативній пам'яті.

 

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

 

Відображення символів, зчитаних з файлу, у програмі реалізовано як посимвольне виведення у стандартний потік stdout. Загалом, виведення символу symb на екран (або в файл, якщо stdout попередньо перескерували) можна виконати кожним із чотирьох наступних викликів функцій:

 

fputc(symb, stdout); putc(symb, stdout);

fputchar(symb); putchar(symb);

 



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

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




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

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

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

  

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


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