Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Файлы.doc
Скачиваний:
14
Добавлен:
24.11.2018
Размер:
171.01 Кб
Скачать

1.6. Пример обработки текстового и бинарного файла

/* Построчное считывание данных из текстового файла "dbase.txt" в буферную переменную s, формирование из них структуры db и запись ее в двоичном режиме в выходной файл "dbout.dat" .

Считывание из двоичного файла записи с номером i и вывод ее на экран.

Считывание из двоичного файла записей и вывод на экран только тех записей, для которых фамилия есть "ivanoff ". */

Таблица соответствия

Идентификатор

Тип

Комментарий

1

lfio

const int

Длина поля фио

2

lpay

const int

Длина поля г. рожд.

3

lo

const int

Длина поля оклада

4

l

const int

Длина записи

5

db

Запись

Запись

6

s

строка

Строка с содерж. записи

7

fin

Текстовый файл

Исходный текстовый файл

8

fo

Двоичный файл

Двоичный файл, получ. из fin

9

kol

int

Кол-во записей файла fin

10

i

int

Номер записи файла fin

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <iostream.h>

main()

{

const int lfio=15,lpay=5,lo=10,//длины полей: фио, г.рожд., оклада в т. файле

l=lfio+lpay+lo; //длина записи в т. файле

struct Man

{ char fio[lfio]; // фио

int year; // год рожд.

float pay; // оклад

};

Man db;

char s[l]; //строка для записм файла

FILE *fin, // Исх. файл

*fo ; // Вых. файлы

if ((fin=fopen("dbase.txt", "r"))==NULL)

{puts("Ошибка открытия файла\n");

fflush(stdin); getchar(); return 1;}

puts("Файл открыт");

fo=fopen("dbout.dat","w+b");

int kol=0;

while (!feof(fin))

{ fgets(s,l,fin); puts(s);

strncpy(db.fio,s,lfio-1);

db.fio[lfio-1]='\0';

db.year=atoi(&s[15]);

db.pay=atof(&s[20]);

fwrite(&db,sizeof db ,1,fo);

kol++;

}

fclose(fin);

int i; printf("Введите номер записи (0-%d)",kol-1);

cin>>i;

if(i>=kol) { cout<<"Запись не существует"; return 1;}

fseek(fo,(sizeof db)*i,SEEK_SET);

fread(&db,sizeof db,1,fo);

cout << db.fio << " "<< db.year<<" " << db.pay;

fseek(fo,0,SEEK_SET);

i=0;

while (i<kol)

{ printf("\n");

fread(&db,sizeof db,1,fo);

if(!strcmp(db.fio," ivanoff ")) cout<<"Есть "<<db.fio;

i++;

}

fclose(fo);

fflush(stdin); getchar();

return 0;

}