- •Лабораторна робота №11 (2 год.) Робота з файлами. Файлові потоки.
- •Теоретичні відомості
- •2. Потоки як узагальнені фільтри
- •Приклад 1. Простий приклад потокового вводу-виводу
- •3. Введення-виведення типів char I char*
- •4. Введення-виведення типів int I long
- •5. Введення-виведення типів float I double
- •6. Введення-виведення класів користувача
- •Приклад 3. Ввід-вивід класу користувача
- •7. Маніпулятори
- •8. Використання текстових файлів для введення
- •Приклад 4. Читання і перевірка файлу на помилки
- •9.Виведення текстових файлів
- •10. Читання бінарних файлів
- •Приклад 6. Читання текстового файлу в бінарному режимі
- •11. Запис у бінарні файли
- •12. Копіювання файлів
- •1. Потоки і потік введення - виведення
- •2. Текстові і двійкові потоки
- •3. Буферизація потоків
- •4. Стандартні потоки
- •5. Приклад програми роботи з файлами
- •6. Різниця при роботі з файлами у мовах Паскаль та с
- •Завдання
3. Введення-виведення типів char I char*
Символьні операції в потоках гранично прості, оскільки не потребують ніякого форматування. Зчитуючи дані з потоку, треба мати на увазі, що все, що зчиталося, розглядається як символи, в тому числі і роздільники (або символи пропуску – while space character). Роздільниками є пробіл, табуляція, переведення стрічки або символ, який зазвичай використовується для розділення елементів даних. Якщо серед символів, що зчитуються, є службові, то вони повинні бути оброблені самим програмістом або маніпулятором, котрому явно належить це зробити. Приклад 2 показує вилучення символів з потоку.
Приклад 2. Коротка програма, що вилучає символи з потоку
#include <iostream.h>
void main()
{
char c;
cout << “\nHit a key ”;
cin >> c;
cout << “\nThe key typed was: ” << c;
}
Програма відображає на екрані повідомлення і потім чекає натискання довільної клавіші і повернення каретки. Після цього за допомогою оператора вилучення читається потік cin, і прочитане значення використовується в операторі виводу. Щоб ввести дані в програму, користувач повинен натиснути <Enter>. Читання вхідного символа без натискання <Enter> можна виконати за допомогою непотокової функції, що підтримує ввід необроблених даних, наприклад getch() або getche():
char c = gecht();
якщо програма буде вимагати саме такої поведінки потоку cin, то слід створити новий похідний клас, що забезпечує потрібну поведінку.
4. Введення-виведення типів int I long
Читати і записувати дані типів int i long дуже просто, оскільки всю роботу роблять вбудовані механізми вставки і вилучення символів. Коли з потоку вилучаються int i long, система автоматично очищує ввід від служебних символів.
Можна управляти вводом і виводом чисел, змінивши наступні атрибути:
систему числення (десяткова, вісімкова, шістнадцяткова)
ширину поля
вирівнювання
заповнення поля
наявність знака +
використання великих букв (для шістнадцяткових чисел)
Атрибути змінюються спеціальними маніпуляторами потоку. При виводі по замовчуванню друкуються лише значущі цифри числа без заповнення всіх позицій поля. Під час вводу будь-який символ, що не є цифрою, знаком + (плюс) або – (мінус), припиняє операцію вилучення. Значення, яке повертається, є числом, що складається з символів, зчитаних до завершення операції.
5. Введення-виведення типів float I double
Типи float i double читати і записувати так само легко, як int i long. При вилученні чисел з потоку спочатку пропускаються всі символи пропуску. Вилучення припиняється на першому символі, не допустимому в числі з плаваючою крапкою. Вбудовані механізми вставки і вилучення забезпечують таку поведінку по замовчуванню.
Формат, який використовується для відображення float i double, легко змінити за допомогою маніпуляторів. Зокрема, можна керувати наступними атрибутами:
кількість десяткових цифр
використання наукового запису
друк знака +
заповнення
ширина поля
вирівнювання
Читання float, double і long double припиняється виявленні недопустимого для числа символу. Недопустимі символи з потоку не вилучаються.