Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 563; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.220.219 (0.006 с.) |