Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
84
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

9.3. Чтение текстового файла

Текстовый файл поделен на строки. Строки могут быть разной длины. Данные в строках текстового файла разделены пробельными символами.

Для чтения данных из текстового файла используется операция >> «извлечь из потока». Ее правым операндом может быть числовая, символьная и строковая переменная, а левым операндом – файловая переменная. Операция >> читает данные из текстового файла, разделенные пробельными символами, преобразует данные из символьного формата в двоичный формат согласно типу правого операнда и записывает данные в переменную, указанную в качестве правого операнда.

Пример чтения из начала текстового файла с именем «a.txt» двух чисел:

ifstream f;

int x;

float y;

f.open(“a.txt”);

f>>x>>y;

Каждая файловая переменная имеет связанный с ней указатель, указывающий на позицию файла, из которой будут считываться данные (текущую позицию файла). При открытии файла в режиме чтения указатель указывает на начало файла. При чтении очередного данного указатель перемещается к следующему данному в файле.

Пример программы поиска в текстовом файле информации о работниках, зарплата которых меньше заданного значения. О каждом работнике в текстовом файле последовательно записанна информация: номер страховки, фамилия, имя, зарплата.

#include <fstream.h>

#include <iostream.h>

#include <conio.h>

struct worker //модель работника

{

char number[12]; //номер страховки

char fam[15]; //фамилия

char name[15]; //имя

int salary; //зарплата

};

void main()

{

worker w; //информация о работнике

ifstream f; //входной файловый поток

char name[12]; //имя файла

int x; //зарплата для поиска работников

cout<<"x? "; cin>>x;

cout<<"name? "; cin>>name;

f.open(name); //открытие файла для чтения

//Цикл чтениия файла и вывода данных файла на экран

while (!f.eof()) //пока не конец файла

{

f>>w.number >>w.fam>>w.name>>w.salary; //чтение данных о //работнике

if(!f.eof()) //контроль конца файла

if (w. salary<x)

cout<<w.number <<’ ‘<<w.fam<<’ ‘<<w.name<<’ ‘ <<w.salary <<endl;

}

f.close();//закрытие файла

getch();

}

В программе используются функции файловых потоков eof и close. Функция eof имеет значение false, если указатель файла не достиг конца файла. Значение функция eof становится равным true при попытке чтения данных из конца файла. В программе в теле цикла while повторно контролируется конец файла. При отсутствии такого контроля данные о последнем работнике буду выведены два раза, если зарплата последнего работника меньше заданной.

Функция close закрывает файл и разрывает связь между файловой переменной и конкретным файлом. Вызывать эту функцию необходимо перед изменением режима работы с файлом, переименованием или удалением файла, а также при завершении записи данных в файл. В данной программе оператор f.close(); не обязателен.

9.4. Создание текстового файла

Для записи данных в текстовый файл используется операция << (поместить в поток). Она извлекает данные из оперативной памяти (из переменной), преобразует их из двоичного формата в текстовый формат и записывает данные в файл в позицию указателя файла. После записи данных в файл указатель файла перемещается в позицию, следующую за последним записанным данным.

Пример записи в начало текстового файла с именем a.txt двух чисел:

ofstream f1;

int x=10;

float y=2.5;

f.open(“a.txt”);

f1<<x<<’ ‘<<y;

Пример программы записи в текстовый файл данных о работниках:

#include <iostream.h>

#include <fstream.h>

struct worker //тип работник

{

char number [12]; //номер страховки

char fam[15]; //фамилия

char name[15]; //имя

int salary; //зарплата

};

void main()

{

woker w;

ofstream f; //выходной поток

char name[20]; //имя файла

int n; //количество работников

cout<<"filename: ";

cin>>name;

f.open(name); //открытие файла в режиме создания

//Запись в файл данных о работниках

cout<<”n?”;

cin>>n;

for(int i=1; i<=n; i++)

{

cout<<”number? ”; cin>>w. number;

cout<<”fam? ”cin >>w.fam;

cout<<” name? ”cin>>w.name;

cout<<” salary? ”cin>>w.salary;

f<<w.number <<’ ‘<<w.fam<<’ ‘<<w.name<<’ ‘<<w.salary <<endl;

}

f.close(); //закрытие файла (обязательно)

}

В примере файл открывается по умолчанию в режиме создания. Если существует файл с именем name, то его размер становится равным 0. Данные о каждом работнике записываются в отдельные строки файла. Элементы данного об одном работнике в файле разделяются пробелами.

Для записи данных в конец существующего файла файл надо открывать в режиме ios::app. В этом режиме файл не очищается, а указатель файла при открытии файла устанавливается на конец файла.

Пример фрагмента программы записи информации об одном работнике в конец файла.

f.open(name, ios::app);//для записи данных в конец

cin>>w.number>>w.fam>>w.name>>w. salary >>w.nal;

f<<w. number<<’ ‘<<’ ‘<<w.fam<<’ ‘<<w.name<<’ ‘<<w. salary <<endl;

f.close();//обязательно