Требуется на экран, на принтер или в текстовый файл вывести список в форме таблицы. Например:
СПИСОК СОТРУДНИКОВ ФИРМЫ
Фамилия | Год рожд. | Оклад |
Иванов И.П. | ||
Авчинникова | ||
Васильков | ||
Чернов |
/* Поиск в массиве структур, читаемых из текстового файла */
#include <stdio.h> // с записью рез-тов в новый текстовый файл
#include <string.h>
#include <stdlib.h>
// #include <windows.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,*f1; // Вых. файлы
if ((fin=fopen("dbase.txt", "r"))==NULL)
{puts("Ошибка открытия файла\n");
fflush(stdin); getchar(); return 1;}
puts("Файл открыт");
fo=fopen("dbout.txt","w");
f1=fopen("dbout1.txt","w");
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]);
/*if(db.year>2000)*/
fprintf(fo,"%-15s% %10.1f\n", db.fio, db.pay);
fputs(s,f1);
}
fclose(fin); fclose(fo); fclose(f1);
fflush(stdin); getchar();
|
|
return 0;
}
1.6. Пример обработки текстового и бинарного файла
/* Построчное считывание данных из текстового файла " dbase.txt " в буферную переменную s, формирование из них структуры db и запись ее в двоичном режиме в выходной файл " dbout.dat ".
Считывание из двоичного файла записи с номером i и вывод ее на экран.
Считывание из двоичного файла записей и вывод на экран только тех записей, для которых фамилия есть " ivanoff ". */
Таблица соответствия
№ | Идентификатор | Тип | Комментарий |
lfio | const int | Длина поля фио | |
lpay | const int | Длина поля г. рожд. | |
lo | const int | Длина поля оклада | |
l | const int | Длина записи | |
db | Запись | Запись | |
s | строка | Строка с содерж. записи | |
fin | Текстовый файл | Исходный текстовый файл | |
fo | Двоичный файл | Двоичный файл, получ. из fin | |
kol | int | Кол-во записей файла fin | |
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;
}