- •Int fact(int n)
- •Int fact(int n)
- •Void main()
- •Void main()
- •Void main()
- •Int AkkR(int m, int n);
- •Int main()
- •Int AkkR(int m, int n)
- •Int main()
- •Int smacc(int, int);
- •Int test(char *s, char *r)
- •Void main() { Stepp(""); }
- •Int step(int X, int y)
- •If (step(X-1, y))
- •If (step(X, y-1))
- •Void main(void)
- •Void main()
- •Int rings;
- •Init(rings);
- •Void convert (int z)
- •Void f(struct man *q)
- •Int mark[4];
- •Void main()
- •Void proc(man *p)
- •Void main()
- •Void main()
- •Int telephon;
- •Void main()
- •Void fNumber(number * const doc)
- •Void main()
- •Int main()
- •Void main()
- •Void main()
- •Void main()
- •Int fgets (char *s, int m, file *f);
- •Int fputs (char *s, file *f);
- •Void main()
- •Int fread( void *ptr, int size, int n,
- •Int fwrite( void *ptr, int size, int n,
- •Int rate;
- •Void main()
- •Int fseek(file *fp, long pos, int mode);
- •Void main()
- •Int np, n, I; long p[5]; char str[80];
- •Void main()
- •Int main() {
- •Int fread (void *buf, int size, int nrec, file *fd);
- •Int fwrite (void *buf, int size, int nrec, file *fd);
- •Int main()
- •Int main()
- •Infl.Open(“a.Txt”);
- •If (!infl) … //открытие успешно
- •Int main()
- •Inout.Seekg(0);
- •Int main()
- •Void main()
- •Void main()
- •Void main(void)
- •Ifstream prm2("a.Txt") ;
- •If (prm2.Fail())
Int fread (void *buf, int size, int nrec, file *fd);
Int fwrite (void *buf, int size, int nrec, file *fd);
Записать в файл переменную типа long начиная с позиции 20
long d;
fseek (fd, 20L, SEEK_SET);
fwrite (&d, sizeof(long), 1, fd);
Добавить в файл переменную типа student
struct student
{ char *name;
int id, age;
char pol;
} ;
struct student sb;
fseek (fd, 0L, SEEK_END);
fwrite (&sb, sizeof b, 1, fd);
long filelength (int fd) – длина файла
int fileno (FILE *f) - число, определяющее номер файла
Прочитать с начала файла динамический массив в n переменных типа double
double *pd;
pd = new double[n];
fseek(fd, 0L, SEEK_SET);
fread((void*)pd, sizeof(double), n, fd);
fseek(fd, 20L, SEEK_SET);
fwrite((void*)&a, sizeof(long), 1, fd);
Пример размещения переменной в файле
int prm;
long pos;
fseek(fd, 0L, SEEK_END);
pos = ftell(fd);
fwrite((void*)&prm, sizeof(int), 1, fd);
Пример. В созданном заранее двоичном файле с именем Filebn.dat, поменять местами наибольшее и наименьшее из вещественных чисел.
#include <iostream>
using namespace std;
Int main()
{ setlocale (LC_ALL, "RUS");
int n, i, mx, mn;
double *A, max, min;
FILE *f;
f = fopen("Filebn.dat", "rb+");
fread(&n, sizeof(int), 1, f);
cout<<"n="<<n<<endl;
A = new double[n];
fread(A, sizeof(double), n, f);
for (i = 0; i < n; i++)
cout<<A[i]<<' ';
cout<<endl;
for(mx=mn=0, max=min=A[0], i=1; i <n; i++)
{ if (A[i] > max) { max = A[i]; mx = i; }
if (A[i] < min) { min = A[i]; mn = i; }
}
//перемещение указателя к максим. элементу
fseek(f, sizeof(int)+mx*sizeof(double),
SEEK_SET);
//запись min вместо максим. элемента файла
fwrite(&min, sizeof(double), 1, f);
//перемещение указателя к миним. элементу
fseek(f, sizeof(int)+mn*sizeof(double),
SEEK_SET);
//запись max вместо миним. элемента файла
fwrite(&max, sizeof(double), 1, f);
fclose(f);
f = fopen("Filebn.dat", "rb+");
fread(&n, sizeof(int), 1, f);
fread(A, sizeof(double), n, f);
for (i = 0; i < n; i++) cout<<A[i]<<' '; cout<<endl; fclose(f);
delete []A;
return 0;
}
Пример. Файл записей фиксированной длины
nrec size 0 1 2 m nrec-1
___________________________________________________
int int double double ... ... ... ...
____________________________________________________
2 * sizeof(int)+ m * size - адрес (смещение) записи
int nrec, size; FILE *fd;
// Создать пустой файл
int Create(char *name, int sz)
{ if ((fd=fopen(name,"wb"))==NULL) return 0;
size=sz; nrec=0;
fwrite((void*)&nrec,sizeof(int),1,fd);
fwrite((void*)&size,sizeof(int),1,fd);
fclose(fd); return 1;
}
// Открыть файл
int Open(char *name)
{ if ((fd=fopen(name,"rb+wb"))==NULL) return 0;
fread((void*)&nrec,sizeof(int),1,fd);
fread((void*)&size,sizeof(int),1,fd);
fseek(fd,0L,SEEK_END);
if (ftell(fd)!=2*sizeof(int)+(long)nrec*size) { fclose(fd); return 0; }
return 1;
}
#include <alloc.h>
void *Get(int n)
{ void *pp; if (fd==NULL || n >= nrec) return NULL;
pp = (void*)new char [size];
if (fseek(fd, 2*sizeof(int) + n*size, SEEK_SET) ==EOF) { delete pp; return NULL; }
if (fread(pp, size, 1, fd) !=1) { delete pp; return NULL; }
return pp;
}
// Добавить запись
int Append(void *pp)
{ if (fd==NULL) return 0; fseek(fd,0L,SEEK_END);
if (fwrite(pp,size,1,fd)!=1) return 0;
nrec++;
fseek(fd,0L,SEEK_SET);
if (fwrite((void*)&nrec, sizeof(int), 1, fd)!=1) return 0;
return 1; }
main()
{ Double a,*p[20];
Create (“a.dat”, sizeof(double);
Open (“a.dat”);
for (int i=0;i<20;i++) {a=i; Append((void*)&a);}
for (i=0;i<20;i++) P[i]=Get(19-i);
}
Файл записей переменной длины
Файл записей переменной длины -это простая последовательность записей переменной длины, не содержащая какой-либо дополнительной информации о расположении записей
Файл последовательного доступа
Два способа хранения записей переменной длины в файле:
- специальное значение или код -ограничитель записи (строка текста в памяти, имеющая в качестве ограничителя символ '\0');
- каждая запись предваряется переменной-счетчиком, который содержит длину этой записи.
Пример. Пусть в текстовом файле "a.txt" в папке проекта записано несколько предложений. Конец предложения обозначен точкой. Вывести из текстового файла блок предложений с номера n1 по номер n2.
# include <iostream>
using namespace std;