русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ввод - вывод записей


Дата добавления: 2013-12-23; просмотров: 813; Нарушение авторских прав


Функции С++ позволяют обмен данными с файлами последовательной и прямой организации, состоящими из записей фиксированной длины. При этом за одно выполнение одной функции в.в данных записями пересылаются одна и более записей. Запись представляется в виде одной переменной любого типа, кроме файлового. Переменная запись определяется программистом. При в/в данных записями надо использовать бинарные режимы доступа в операторах открытия файлов: wb, rb, ab, ab+.

При чтении записей из файла происходит их ввод в ОП, который производится функцией fread. Прототип функции ввода записей:

int fread (void * DstBuf, unsigned Size, int К, FILE *stream);

Где: DstBuf –по адресу указателя переменной любого типа (записи) в ОП куда помещается запись, прочитанная из файла;

Size – длина записи в байтах, определяется функцией sizeof(тип);

К – количество считываемых записей из файла размером Size;

stream – имя указателя, связанного с файлом для чтения.

Функция fread читает К записей длины Size из входного потока stream и помещает их по адресу DstBuf (структуры). После этого указатель файла, связанный с потоком stream, увеличивается на количество прочитанных байтов = Size * К, и функция fread готова прочесть из файла следующую группу байтов. Чтение из файла происходит от нулевого элемента, до символа конца файла. Функция fread возвращает результат целого типа, который является результатом анализа конца файла:

1. если результат = 1 (истина) запись считана;

2. если результат = 0 (ложь) запись не считана, обнаружен конец файла.

Пример:

#include <stdio.h>

#include <iostream>

using namespace std;

FILE * fp;

struct stud

{int nz;

char fio[20];

float rs;} zapst;

char str[80];

char fn[20] = "ffff.dat";

void main ()

{

 

if (fp = fopen (fn, "rb"))



while(fread(&zapst,sizeof(stud),1,fp))

{

str[0]='\0';

sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);

cout<<str<<'\n';

}

}

Вывод записей из ОП в файл производится функцией fwrite. Прототип фунции:

int fwrite (const void * DstBuf, unsigned Size, int К, FILE *stream);

Назначение формальных параметров функции fwriteаналогично параметрам функции fread. Функция выводит К записей из ОП по адресу переменной DstBuf в файл, связанный с указателем . Указатель файла, связанный с потоком , увеличивается на количество выведенных байтов и устанавливается на позицию с которой можно производить следующий вывод записи в файл или признака конца файла.

Возвращаемое значение:

Целый тип возвращаемого параметра определяет количества записей, реально помещенных в файл. Если это меньше К, то имела место ошибка.

Пример:

FILE * fp;

struct stud

{int nz;

char fio[20];

float rs;} zapst;

 

fwrite(&zapst,sizeof(stud),1,fp);

 

Пример представляет весь проект:

 

#include <stdio.h>

#include <iostream>

using namespace std;

FILE * fp;

struct stud

{int nz;

char fio[20];

float rs;} zapst;

char *sh[3] = {" cbedehia o ctudentax ",

" homep z k | F.I.O | ctepehdia ",

"============================================"};

char str[80];

char fn[20] = "ffff.dat";

void main ()

{

cout <<"bbedite name file: \t "<<fn<<endl;

//cin>> fn;

fp = fopen (fn, "wb");

cout<<"NEW FILE\n";

cout<<"nz:/t ";cin>>zapst.nz;

cout<<"fio:/t ";cin>>zapst.fio;

cout<<"rs:/t ";cin>>zapst.rs;

fwrite(&zapst,sizeof(stud),1,fp);

fclose(fp);

for(int i = 0; i < 3; i++)

cout<<sh[i]<<endl;

if (fp = fopen (fn, "rb"))



while(fread(&zapst,sizeof(stud),1,fp))

{str[0]='\0';

sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);

cout<<str<<'\n';

}

fclose(fp);

cout<<"ADD FILE\n";

if (fp = fopen (fn, "ab"))

{cout<<"ENTER \n";

while (getch() == 13)

{

cout<<"nz:/t ";cin>>zapst.nz;

cout<<"fio:/t ";cin>>zapst.fio;

cout<<"rs:/t ";cin>>zapst.rs;

fwrite(&zapst,sizeof(stud),1,fp);

cout<<"ENTER / ESC \n";

}

}

fclose(fp);

if (fp = fopen (fn, "rb"))



while(fread(&zapst,sizeof(stud),1,fp))

{str[0]='\0';

sprintf_s(str," %8d | %10s | %8.2g ",zapst.nz,zapst.fio,zapst.rs);

cout<<str<<'\n';

}

fclose(fp);

 

}

Работа с файлом в режимах записи, добавления и чтения через один поток

 

#include "stdafx.h"

#include <conio.h> //kbhit()

#include <iostream>

using namespace std;

int main(void)

{

FILE * fsio; // FileStreamInputOutput

char fname[13] = "tstfile.txt";

char rbuf[81] = "";

fsio = fopen(fname, "wt");

fprintf(stdout,"Open file %s in regime 'wt'\n", fname);

fprintf(fsio,"Example of work with file;\n");

for (int i = 2; i<17; i++)

fprintf(fsio,"\n%i line.", i);

fclose(fsio);

fsio = fopen(fname, "at");

fprintf(stdout,"Open file %s in regime 'at'\n", fname);

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

fprintf(fsio,"\n%i added line.", i);

fclose(fsio);

fsio = fopen(fname, "rt");

fprintf(stdout,"Open file %s in regime 'at'\n", fname);

printf("\nContent of file %s:\n", fname);

while(!feof(fsio))

{

fscanf(fsio,"%s",rbuf);//считывается только очередное слово

fprintf(stdout,"next word: %s\n",rbuf);

while(!kbhit())

{

if (getch()!=27) break;

else

{

puts("\nQuit by ESC...");

fclose(fsio);

return 0;

}

}

}

fclose(fsio);

puts("\nProgram done...");

return 0;

}

 

 

Работа с текстовым файлом

 

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(void)

{

FILE *pfs; //PointerFileStream,

char rbuf[127] = "";

pfs = fopen("dat.txt", "wt");

fputs(strcpy(rbuf,"Example of work with file.\n"), pfs);

fputs(strcpy(rbuf,"Last line of file."), pfs);

puts("Two lines was writed in file dat.txt.");

fclose(pfs);

pfs = fopen("dat.txt", "rt");

puts("\nContent of file 'dat.txt':");

while(!feof(pfs))

{

fgets(rbuf, sizeof(rbuf)-1, pfs);

printf("next line: %s", rbuf);

}

fclose(pfs);

puts("\nProgram done...");

return 0;

}

 



<== предыдущая лекция | следующая лекция ==>
Открытие, закрытие и удаление файла. | Дополнительные возможности работы с файлами


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.