Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Використання текстових файлів для введенняСодержание книги Похожие статьи вашей тематики
Поиск на нашем сайте Текстовий файл – це послідовність ASCII-символів, розділена на стрічки. Кожна попередня стрічка закінчується символом переходу на нову стрічку. Класи файлових потоків оснащений функціями для відкриття і закриття файлів, читання і запису стрічок тексту і виконання багатьох інших дій. В прикладі 4 показано, як відкрити файл, перевірити на помилки і вивести його вміст на дисплей.
Приклад 4. Читання і перевірка файлу на помилки
#include <iostream.h> #include <fstream.h>
void main() { //відкриття існуючого файлу ifstream help_file(“\\BC45\\README.TXT”);
//перевірка на помилки при відкритті файлу if(!help_file) { cout << “\nCouldn’t open file \\BC45\\README”; return; }
//відображення вмісту файлу while(help_file) { char buffer[100]; help_file.getline(buffer, sizeof(buffer)); cout << “\n” << buffer; } }
Виведення текстових файлів Записувати файли майже так само легко, як і читати. Виникає невелика складність при відкритті файлу в режимі виводу, коли потрібно точно знати, як буде записуватися файл. По замовчуванню існуючий файл (в момент відкриття) врізається до нуля, але таку поведінку можна змінити. В прикладі 5 відкривається файл README.TXT, і його перші чотири стрічки копіюються в новий файл COPY.
Приклад 5. Проста програма запису в потік текстового файлу
#include <iostream.h> #include <fstream.h>
void main() { //відкриття вже існуючого файлу ifstream help_file(“\\BC45\\README.TXT”);
//відкриття файлу і його урізання до нуля ofstream copy_file(“COPY”);
//перевірка на помилки відкриття if(!help_file) { cout << “\nCouldn’t open file \\BC45\\README”; return; } if(!copy_file) { cout << “\nCouldn’t open file COPY”; return; } //копіювання перших чотирьох стрічок файлу README while(help_file && copy_file) { char buffer[80]; help_file.getline(buffer, sizeof(buffer)); copy_file << buffer << “\n”; if(++line_count == 4) break; } }
Оператор copy_file << buffer << “\n”; записує у файл стрічку, що закінчується нулем, а потім додає символ нової стрічки так, щоб файл можна було читати за допомогою стандартного механізму вилучення стрічок. В файли виводу можна писати окремі символи і інші вбудовані типи даних, наприклад:
char c; char* cp; int i; long l; float f; double d;
copy_file << c << cp << i << l << f << d;
Щоб відкрити файл для запису, не втративши при цьому існуючого в ньому тексту, потрібно використовувати режим додавання в кінець:
//відкриття вивідного файлу в режимі додавання в кінець ofstream copy_file(“COPY”, ios::app);
Читання бінарних файлів Дані в бінарних файлах не мають ніяких роздільників і спеціальних символів. Це також стосується символу ‘\0’. Таким чином, стрічки в бінарному файлі не закінчуються нульовим символом. Фактично самі стрічки в бінарному фалі не мають ніякого смислу. Бінарні файли потрібно обробляти не так, як текстові: в них немає службових символів, їх дані не організовані в стрічки з позначенням кінця кожної стрічки і серед даних можуть бути будь-які восьмибітові значення. Тим не менше, робота з бінарними файлами досить проста. Відкриття і закриття їх здійснюється точно так само, як і текстових файлів, за виключенням того, що в функцію відкриття передається флаг ios::binary. Цілком можливе відкриття текстового файлу в бінарному режимі. Нижче приведено відповідний приклад 6.
Приклад 6. Читання текстового файлу в бінарному режимі
#include <iostream.h> #include <fstream.h>
void main() { //відкриття існуючого файлу ifstream help_file(“\\BC45\\README”, ios::binary);
//перевірка на помилки відкриття файлу if(!help_file) { cout << “\nCouldn’t open file \\BC45\\README”; return; }
//відображення файлу readme while(help_file) { char c; help_file.get(c); cout << c; } }
Істотною відмінністю між обробкою текстовий і двійкових фалів є використання операторів вилучення даних з потоку. Оскільки двійкові дані розглядаються як неформатовані, гарантована робота лише механізму вилучення символів. Якщо вилучені символи поміщуються в символьний буфер, то повинен бути вказаний розмір буфера:
char buffer[100]; help_file.read(buffer,sizeof(buffer));
Запис у бінарні файли Для запису бінарних даних в файл існує два основних методи: посимвольний запис і запис блоками. Для першого методу використовується функція put(char), для другого – функція write(char*, int). В прикладі 7 продемонстрована робота обох функцій.
Приклад 7. Запис двійкових даних в файл за допомогою двох методів
#include <iostream.h> #include <fstream.h>
class Data { char name[10]; char surname[20]; int age; float salary;
public: Data() {age=0;} int Age() {return age;} ~Data() {} };
void main() { //відкриття існуючого файлу ofstream company_records(“RECORDS.DAT”, ios::binary);
//перевірка на помилки відкриття if(!company_records) { cout << “\nCouldn’t open file RECORDS.DAT”; return; }
Data employee;
int number=0; while(number < 10 && company_records) { company_records.put((char)number++); company_records.write((char*)&employee, sizeof(employee)); } }
Програма записує 10 записів про службовців з об’єкту класу в двійковий файл. Як і завжди, потік слід перевірити на помилки читання або запису. Використання функції write(...) з класами, що мають віртуальні функції або інші складні конструкції, деколи призводить до запису даних, які потім неможливо правильно прочитати за допомогою функції read(...). якщо є сумніви, при записі складних даних краще працювати зі структурами, ніж з класами. Бінарні файли, в порівнянні з текстовими, складніше використовувати. Це результат неструктурованої природи даних. Коли в файл поміщується бінарний об’єкт, компілятору потрібно точно вказати, яка довжина об’єкту, оскільки в двійковому файлі немає роздільників стрічок, що вказують на довжину. Те ж саме можна сказати і про вилучення даних.
Копіювання файлів Програми часто читають один файл, роблять щось з даними і потім копіюють їх в інший файл. Копіювання файлів може виконуватися за допомогою класів iostream різними способами, деякі з них досить зручні. Концептуально найпростіший спосіб – читати і писати по одному символу до тих пір, поки не буде досягнуто кінець файлу вводу. Наступний код показує, як це зробити на практиці:
#include <fstream.h>
void f() { ifstream input(“c:\\t.bat”); ofstream output(“c:\\u.bat”); char c; while(input.get(c)) output.put(c); }
|
||
|
Последнее изменение этой страницы: 2016-04-26; просмотров: 617; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.006 с.) |