File (Методичка С++), страница 4

2013-09-07СтудИзба

Описание файла

Файл "File" внутри архива находится в папке "METODY". Документ из архива "Методичка С++", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "File"

Текст 4 страницы из документа "File"

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

  • Пример 2-8. Использование файловой переменной в качестве параметра.

{Программа создает файл целых чисел и печатает его содержимое. Затем файл модифицируется путем добавления в нее новых значений и снова печатает его содержимое. Для печати используется процедура печати с одним параметром -файловой переменной}

type ff=file of integer; {новый тип - файл целых чисел}

var

f1:ff; {файловая переменная типа файл целых чисел}

a,i:integer;

fname:string[10];

Procedure Prfile(var f:ff);

{процедура печати содержимого файла целых чисел

получает в качестве параметра файл целых чисел}

begin

reset(f);

writeln('содержимое файла');

i:=1;

while not eof(f) do

begin

read(f,i);

write(i:4);

end;

close(f);

writeln;

end;

Begin

writeln('введите имя файла');

readln(fname);

Assign(f1,fname);

writeln('введите ',5:3,' целых чисел:');

rewrite(f1);

for i:=1 to 5 do

begin

read(a);

write(f1,a);

end;

close(f1);

write(' начальное ');

Prfile(f1); {вызвать процедуру печати для файла f1}

reset(f1); {открыть файл для чтения}

seek(f1,filesize(f1)); {установка указателя в конец файла для дозаписи}

for i:=6 to 10 do write(f1,i); {добавление записей в файл}

close(f1); {закрытие файла после дозаписи}

Write(' после дозаписи ');

prfile(f1); {вызов процедуры печати модифицированного файла}

end.

Результат работы программы:

yyyy.dat

введите 5 целых чисел:

34 5 67 9 12

начальное содержимое файла

34 5 67 9 12

после дозаписи содержимое файла

34 5 67 9 12 6 7 8 9 10

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

  • Пример 2-9. Вычеркивание из типизированного файла записей.

{ Программа создает процедуру выделения из текстового файла информации о студентах в файл типа " запись" и процедуру удаления из файла записи с ошибочной группой. В основной программе вызываются соответствующие процедуры и печатаются содержимое файлов до и после обработки}

program vichzap;

uses crt;

type ss=string;

type zap=record

fam:string[10];

gr:integer;

oc1,oc2:byte;

adr:string[20];

end;

type pr=file of zap;

var

f:text; { текстовый файл исходных данных см. раздел 2.4.2}

fz,fr:pr; {файлы типа запись}

i,j:integer;

p:zap;

procedure vid(var f:text;var fz:pr);

{ процедура формирования типизированного файла записей о студентах

из текстового файла с исходными данными}

var z:zap;

begin

rewrite(fz); {открыть файл типа запись на запись}

reset(f); {открыть текстовый файл на чтение}

while not eof(f) do {пока не конец входного файла}

begin

readln(f,z.fam,z.gr,z.oc1,z.oc2,z.adr); {читать из входного файла}

write(fz,z); { писать в файл типа запись}

end;

reset(fz); {установить файл на начало}

end;

procedure vich(var f:pr);

{ процедура удаления из файла некоторых записей }

var z:zap;

f1:pr;

begin

assign(f1,'fr.dat');

reset(f); {открыть файл на чтение}

rewrite(f1); {открыть временный файл на запись}

while not eof(f) do {пока не конец файла}

begin

read(f,z); {читать из основного файла }

if z.gr<>1 then {если номер группы не равен 1}

write(f1,z); {писать во временный}

end;

close(f); {закрыть основной файл}

close(f1); {закрыть временный файл}

erase(f); {удаление основного файла}

rename(f1,'fz.dat'); {переименование временного файла}

assign(f,'fz.dat'); {переназначить временный файл, как основной}

reset(f) {открыть основной файл на чтение}

end;

{ основная программа}

begin

clrscr;

assign(f,'f.dat'); {назначить файл для входных данных }

assign(fz,'fz.dat'); { назначить файл для хранения записей о студентах}

vid(f,fz); {вызвать процедуру формирования файла записей}

writeln(' данные, считанные из файла входного файла'); writeln;

while not eof(fz) do { пока не конец файла записей}

begin

read(fz,p); {читать запись из файла}

writeln(p.fam:10,p.gr:3,p.oc1:3,p.oc2:3,p.adr); {печатать запись}

end;

writeln;

writeln(' результат вычеркивания ');

writeln;

vich(fz); { вызвать процедуру вычеркивания из файла записей}

while not eof(fz)do { пока не конец файла}

begin

read(fz,p); { читать запись}

writeln(p.fam:10,p.gr:3,p.oc1:3,p.oc2:3,p.adr); { печатать запись}

end;

close(fz); { закрыть файл записей}

close(f); { закрыть файл исходных данных}

end.

Результат работы программы

данные, считанные из файла входного файла

иванов 12 5 4 молодежная д.5 кв.3

петров 12 4 4 юбилейный д.45 кв.4

сидоров 1 3 4 калинина д.85 кв.33

васин 12 5 4 комсомольскаяя д.32

мамин 1 5 5 молодежная д.1 кв.6

рязанов 12 5 3 молодежная д.6 кв.2

результат вычеркивания

иванов 12 5 4 молодежная д.5 кв.3

петров 12 4 4 юбилейный д.45 кв.4

васин 12 5 4 комсомольскаяя д.32

рязанов 12 5 3 молодежная д.6 кв.2

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

Текстовый файл - это файл, элементами которого являются символьные строки переменной длины, заканчивающиеся признаками конца строки ( EOLN ). В конце всего файла - признак конца файла (EOF). Эти признаки можно протестировать одноименными логическими функциями, но можно воспользоваться следующими системными соглашениями:

EOLN - это последовательность кодов ASCII 13 (CR - конец строки, вводится при нажатии клавиши «ENTER») и 10 (LF - перевод каретки)

EOF - это код ASCII 26 (CTRL - Z))

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

Текстовые файла предназначены для хранения текстовой информации: символов, строк, символьные массивы, а также логические и числовые данные, которые при этом преобразуются к символьному виду. Поэтому, иногда текстовые файлы называют файлами с преобразованием. Объявление текстового файла осуществляется с помощью стандартного идентификатора TEXT двумя способами:

1. предварительно ввести новый тип - файл переменных типа TEXT, а затем определить файловую переменную этого типа, например

TYPE <имя типа> = TEXT;

VAR <файловая переменная >: <имя типа>;

2. сразу определить файловую переменную как файл типа TEXT, например

VAR <файловая переменная >: TEXT;

Текстовый файл можно открыть на запись, чтение и добавление. Файл, открытый на запись не может использоваться для чтения и наоборот. При открытии файла на добавление, система проверяет не был ли файл открыт на чтение или запись, и если такой факт имел место - производится сначала его открытие, а затем уже открытие на добавление.

Процедура работы с текстовыми файлами.

  1. Функция EOLN(<файловая переменная>) - логического типа, возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки; при отсутствии файловой переменной проверяется стандартный файл INPUT;

Имеется ряд отличий в работе функций EOLN и EOF с дисковыми файлами и логическими устройствами. Для логического устройства невозможно предвидеть, каким будет результат чтения очередного символа. Поэтому при работе с логическим устройством функция EOLN возвращает TRUE, если последним считанным символом был CR CTRL-L. при работе с диском функция EOLN возвращает TRUE, если последним считанным символом будет CR CTRL-L

Аналогичное различие наблюдается и в функции EOF: для логического устройства TRUE возвращается в случае, если последним символом был CTRL-L, а при чтении с диска - если следующим считываемым символом будет CTRL-L.

  1. Процедура READ(<файловая переменная>,<список ввода>) обеспечивает ввод символов, строк и чисел.

<список ввода> - последовательность из одной или более переменных типа CHAR, STRING, а также любого целого и вещественного типа. При обработке переменных типа CHAR выполняется чтение одного символа из файла и присваивание считанного значения переменной. Если перед выполнением чтения указатель файла достиг конца очередной строки, то результатом чтения будет символ CR (ASCII код 13 ), а если достигнут конец файла, то символ EOF ( ASCII код 26 ).

При вводе переменных типа STRING количество считанных процедурой и перемещенных в строку символов равно максимальной длине строки, если раньше не встретились символы CR или EOF, которые в строку не переносятся. Символы, выходящие за размер максимальной длины строки - отбрасываются. Новое обращение к процедуре READ вернет пустую строку. Следовательно, READ не в состоянии читать последовательность строк, так как первая строка будет прочитана правильно, а все последующие окажутся пустыми.

При вводе числовых данных READ пропускает все пробелы, знаки табуляции и маркеры до первого до первого значащего символа и читает строку до пробела, знака табуляции и маркера. Полученная подстрока преобразуется из символьного вида во внутреннее представление в соответствии с типом числа и присваивается переменной из списка. Если нарушен формат - возникает ошибка ввода-вывода. если прочитан конец файла - переменной присваивается 0.

Ввод логических констант процедурами READ и READLN не предусмотрен.

Чтение осуществляется через буфер, который передается процедуре при нажатии клавиши ENTER и равен 127 байт.

  1. Процедура READLN(<файловая переменная>,<список ввода>) обеспечивает ввод символов, строк и чисел. Идентична процедуре READ, за исключением того, что после чтения последней переменной оставшаяся часть строки до маркера EOLN пропускается , так что следующее обращение к READLN или READ начнется с первого символа новой строки.

Эта процедура может быть вызвана без параметра. <список ввода>, что приведет к пропуску всех символов текущей строки вплоть до EOLN.

Процедуры READ и READLN могут использоваться без параметра <файловая переменная>. В этом случае операция чтения осуществляется из стандартного файла INPUT, причем, использование процедуры READLN без параметров после процедуры READ приведет к простому переходу на новую строку файла INPUT. Применение этой же процедуры без предшествующей ей процедуры READ вызывает переход в состояние ввода и выполнение программы приостанавливается до нажатия клавиши ENTER. Может использоваться как пауза для просмотра содержимого экрана.

  1. Процедура WRITE(<файловая переменная >,< список вывода >) - обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство.

< список вывода > - последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также любого целого или вещественного типа.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5193
Авторов
на СтудИзбе
434
Средний доход
с одного платного файла
Обучение Подробнее