Чем отличается reset от rewrite

Обновлено: 30.06.2024

Для избежания конфликтов, AssignFile заменяет стандартную процедуру Assign в Delphi. Однако для обратной совместимости вы можете использовать Assign. Процедура AssignFile сопоставляет имя внешнего файла с файловой переменной.

F - файловая переменная любого файлового типа, FileName - выражение типа String или выражение типа PChar, если допускается расширенный синтаксис. Все дальнейшие операции с F производятся с внешним файлом.

Не используйте AssignFile с уже открытой файловой переменной.

Function Eof[(var F: Text)]: Boolean;

Проверяет, является или нет текущая позиция файла концом файла.

Eof(F) возвращает True, если текущая позиция файла находится за последним символом файла или если файл пуст; иначе, Eof (F) возвращает False.

Директива позволяет вам обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций.

При выключенной директиве , вы должны использовать IOResult для проверки ошибок ввода - вывода.

Procedure Write([var F: Text;] P1 [, P2, . Pn]);

Записывает одну или более величин в текстовый файл.

Каждый параметр записи должен иметь тип Char, один из целочисленных типов (Byte, ShortInt, Word, LongInt, Cardinal), один из типов с плавающей запятой (Single, Real, Double, Extended, Currency), один из строковых типов (PChar, AnsiString, ShortString), или одного из логических типов (Boolean, Bool).

Function Eoln[(var F: Text)]: Boolean;

Проверяет, является ли текущая позиция файла концом строки текстового файла.

Eoln(F) возвращает True, если текущая позиция файла - в конце строки или файла; иначе Eoln(F) возвращает False.

Function SeekEof[(var F: Text)]: Boolean;

Возвращает признак конца файла и может использоваться только для открытых текстовых файлов. Обычно применяется для считывания числовых значений из текстовых файлов.

Procedure CloseFile(var F);

Из-за конфликтов наименования, процедура CloseFile заменяет стандартную процедуру Close из Borland Pascal. Используйте CloseFile чтобы разорвать связь между файловой переменной и внешним дисковым файлом и закрыть файл.

F - файловая переменная любого файлового типа, открытая процедурами Reset, Rewrite или Append. Внешний файл, связанный с F, полностью модифицируется и затем закрывается, освобождая дескриптор файла для повторного использования.

Директива позволяет вам обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций.

При выключенной директиве , вы должны использовать IOResult для проверки ошибок ввода - вывода.

Procedure Rewrite(var F: File [; Recsize: Word]);

Создает и открывает новый файл.

F - переменная любого файлового типа, связанного с внешним файлом с использованием AssignFile.RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизирован-ный файл, RecSize определяет размер записи, который используется при пе-редаче данных. Если RecSize опущен, заданный по умолчанию размер запи-си равен 128 байт.

Процедура Rewrite создает новый внешний файл с именем, связанным с F.

Если внешний файл с тем же самым именем уже существует, он удаляется, и создается новый пустой файл.

Procedure Read([var F: Text;] V1 [, V2, . Vn]);

Для типизированных файлов процедура читает компонент файла в переменную. При каждом считывании текущая позиция в файле продвигается к следующему элементу.

Для текстовых файлов читается одно или несколько значений в одну или несколько переменных.

С переменными типа String Read считывает все символы вплоть до следующей метки конца строки (но не включая ее), или пока функция Eof(F) не примет значение True. Переменной присваивается получившаяся в ре-зультате символьная строка.

В случае переменной целого или вещественного типа процедура ожидает поступления последовательности символов, образующих число по правилам синтаксиса языка Object Pascal. Считывание прекращается при обнаружении первого пробела, символа табуляции или метки конца строки, или в том случае, если функция Eof(F) принимает значение True. Если чи-словая строка не соответствует ожидаемому формату, то происходит ошибка ввода-вывода.

Процедуры reset, rewrite.

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

Задание для лабораторной работы выбрать согласно варианту по приведённой таблице. Вариант определяется порядковым номером в журнале группы.

Общие сведения.

1. Классификация файлов. В программе существует три класса файлов - типизированные, бестиповые и текстовые, - которые позволяют считывать большие объемы данных непосредственно с диска, не вводя их с клавиатуры.

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

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

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

Описание файловых переменных.

Текстовый файл описывается с помощью служебного слова text.

var f: text;

Типизированные файлы могут описываться следующим образом:

var f: file of тип;

Предварительно можно определить новый тип данных:

Type имя = file of тип;

Бестиповый файл описывается с помощью служебного слова file:

var имя: file;

Type

Massiv = array [1..25] of real;

ff = file of real;

Var

c : file of integer;

d : file of massiv;

Обработка типизированных файлов.

Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными:

INPUT - для чтения данных с клавиатуры;

OUTPUT - для вывода на экран дисплея;

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

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

Процедура assign.

Для начала работы с файлами необходимо связать файловую переменную в программе с файлом на диске. Для этого используется процедура assign (f, s), где f – имя файловой переменной, а s – полное имя файла на диске (файл должен находиться в текущем каталоге при условии, что к нему специально не указывается путь).

Var

f: file of real;

Begin

assign (f, ‘ d: \ tp\ tmp\ abc.dat’);

Процедуры reset, rewrite.

В Паскале в случае использования типизированных файлов можно открыть файл для чтения и записи одновременно.

После установления связи между файловой переменной и именем файла на диске нужно открыть файл, воспользовавшись процедурами reset или rewrite.

Когда будет выполнена процедура reset(f), где f -имя файловой перемен­ной, файл будет открыт для чтения и станет доступен его первый элемент. В результате этой процедуры специальная переменная - указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0. Если в процессе выполнения программы делается попытка открыть для чтения не существующий файл, то возникает ошибка, которая может быть проанализирована с помощью встроенной функции IOREZULT типа Word. В случае отсутствия файла, открываемого для чтения значение этой функции не равно 0.




Да­лее можно выполнять чтение и запись информации из файла. Под чтением файла понимается ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. Данные внеш­него файла становятся доступными программе.

Файл можно открыть для записи и очистить при помощи процедуры rewrite (f), где f -имя файловой переменной. Она открывает и очищает файл (то есть удаляет из него информацию), после чего его можно использовать для записи. Под записью файла понимается вывод результатов программы из оперативной памяти ЭВМ на диск, т. е. создание нового файла на внеш­нем устройстве.

Процедура close.

Процедура close(f), где f - имя файловой переменной, закрывает файл, который ранее был открыт процедурами reset, rewrite. Именно ее следует использовать при закрытии файла, в который была записана информация. Дело в том, что writе не обращается непосредственно к диску, а пишет информацию в специальный участок памяти, называемый буфером файла. После того как буфер заполнится, вся информация из него вносится в файл. При выполнении операции close сначала происходит запись буфера файла на диск, и только потом файл закрывается. Если его не закрыть вручную, то это произойдет автоматически при завершении работы программы, однако пропадет информация, хранимая в буфере файла.

Function SeekEoln[(var F: Text)]: Boolean;

Возвращает признак конца строки в файле и может использоваться только для открытых текстовых файлов. Обычно применяется для считывания числовых значений из текстовых файлов.

Procedure Reset(var F [: File; RecSize: Word]);

Открывает существующий файл.

F - переменная любого файлового типа, связанного с внешним файлом с помощью AssignFile. RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизированный файл, RecSize определяет размер записи, который используется при передаче данных. Если RecSize опущен, заданный по умолчанию размер записи равен 128 байт.

Процедура Reset открывает существующий внешний файл, ассоциированный с файловой переменной F. Если внешнего файла с таким именем нет, возникает ошибка времени выполнения. Если файл, связанный с F уже открыт, он сначала закрывается и затем вновь открывается. Текущая позиция файла устанавливается к началу файла.

Procedure Readln([var F: Text;] V1 [, V2, . Vn]);

Является расширением процедуры Read и определена для текстовых файлов. Считывает строку символов в файле (включая маркер конца строки) и переходит к началу следующей строки. Вызов функции Readln(F) без па-раметров приводит к перемещению текущей позиции файла на начало сле-дующей строки, если она имеется, в противном случае происходит переход к концу файла.

Procedure Erase(var F);

Удаляет внешний файл, связанный с F.

F - файловая переменная любого файлового типа.

Перед вызовом процедуры Erase, файл необходимо закрыть.

Директива позволяет вам обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций.

При выключенной директиве , вы должны использовать IOResult для проверки ошибок ввода - вывода.

Procedure Write(F, V1, . Vn);

Записывает переменную в компонент файла. Переменные V1. Vn должны быть того же типа, что и элементы файла. При каждой записи переменной текущая позиция в файле передвигается к следующему элементу.

Function Eof(var F): Boolean;

(типизированные или нетипизированные файлы)

Операции ввода-вывода Write, Read

Процедура read предназначена для чтения значений из файла в программу. Первым параметром должно быть имя файловой переменной, к которой была применена одна из операций открытия (reset, rewrite). Далее должны следовать переменные, в которые будут помещаться читаемые из файла значения. Тип этих переменных должен совпадать с базовым типом файла из первого параметра. Начиная с текущей позиции указателя файла будут последовательно читаться значения, содержащиеся в файле.

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

Выполнение процедуры write следующее:

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

13.3. Перемещение по файлу.

При помощи двух процедур: Seek, Truncate.

И три дополнительные функции: FileSize, FilePos, EOF.

Процедура Seek позволяет явно изменить значение текущего указателя, установив его на элемент файла с заданным номером. Процедура имеет два параметра : переменную файлового типа и целое (типа longint).

Функции FileSize, FilePos позволяют получить дополнительную информацию о файле, который указывается в качестве их единственного параметра. Первая процедура возвращает общее число элементов файла, а вторая - номер текущего указателя.

Добавление в 'хвост' файла данных>

Функция Eof вызывается с одним параметром - файловой переменной - и возвращает логическое значение true или false в зависимости от того достигнут ли конец файла или нет.

Процедура truncate используется для отсечения от файла его хвостовой части, начиная от текущей позиции указателя включительно. Параметр - файловая переменная.

13.4 Обработка ошибок ввода - вывода

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

Тогда программа в случае ошибки не вызовет ее остановку, а запомнит в стандартной функции без параметров. И в зависимости от ее значения построить дальнейшие действия.

if ioresult <>0 then

write ('ошибка при открытии файла');

Следует отметить, что после отключения режима автоматического контроля следует проверить сразу состояние ioresult. Пока этого не будет сделано, работу продолжать нельзя. После обращения переменная обнуляется до следующего аварийного завершения обращения к файлу.

if code<>0 then begin

write('ошибка при открытии файла : ');

1: write ('файл не найден');

3: write ('маршрут не найден');

4: write ('слишком много открытых файлов');

5: write ('запрет доступа к файлу');

12: write ('некорректный код доступа к файлу');

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

Текстовый файл объявляется так:

Для текстовых файлов применимы те же самые операции инициализации, открытия и закрытия, что и для обычных файлов. За исключением того, что reset открывает файл только для чтения, rewrite - для его обновления.




Дополнительно для текстовых файлов определены следующие операции:

· Append - один параметр - файловая переменная. Аналогична rewrite, но не очищает файл, а добавляет новые строки в конец уже существующего файла.

· SetTextBuf - процедура, определяющая буфер для обмена с текстовым файлом.

· SetTextBuf (var f: text; var Buf; Size :word);

Операции ввода - вывода это read, write. Здесь необходимо помнить, что текстовый файл по определению содержит символьную информацию, поэтому при записи значения других типов будут преобразовываться в символьное представление. Для текстовых файлов имеется две модификации - процедуры Readln, writeln. Выполняют те же действия, что и read, write, но после операции чтения и записи производится переход к следующей строке текстового файла.

Для текстовых файлов неприменима процедура seek ввиду произвольных длин строк. Для решения задач перехода используются функции SeekEoln и SeekEof - с файловой переменной.

· SekEoln - производит поиск конца текущей строки и возвращает true

· SeekEof - осуществляет поиск конца файла, либо первого значащего символа. True - конец файла, false - в ином случае.

13.6 Файлы без типа.

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

Не типизированные файлы открываются теми же процедурами, что и обычные текстовые файлы, - reset, rewrite, но для не типизированных файлов вторым параметром этих процедур должен быть задан размер записи.

Размер записи задается в байтах.

Для организации обменов с не типизированными файлами предназначены две стандартные процедуры: BlockRead, BlockWrite.

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

BlockRead (var f: file; var Buf; Count :word);

BlockRead (var f:file; var Buf; Count: word; var Result : word);

F - имя не типизированного файла, из которого производится чтение ;

Buf - переменная - буфер;

Count - число записей читаемых за один вызов;

Result - число фактически прочитанных записей.

Аналогично описывается стандартная процедура BlockWrite. В обеих процедурах нужно следить за тем, чтобы переменной буфера buf был равен RecSize* Count, где первое - это размер записи указанной в процедуре reset или rewrite и второе - число читаемых - записывающих записей.

Function FilePos(var F): LongInt;

Возвращает текущую позицию файла внутри файла.

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

F - переменная любого файлового типа, кроме типа Text.

Function FileSize(var F): Integer;

Возвращает размер в байтах файла F. Однако, если F - типизированный файл, FileSize возвратит число записей в файле.

Перед использованием функции FileSize, файл должен быть открыт.

Если файл пуст, FileSize(F) возвращает 0.

F - переменная любого файлового типа.

Procedure Read(F, V1 [, V2, . Vn]);

(типизированные и нетипизированные файлы)

Procedure Append(var F: Text);

Открывает существующий текстовый файл для добавления информации в конец файла (дозаписи).

Если внешнего файла с данным именем не существует, происходит ошибка времени выполнения.

Если файл F уже открыт, он закрывается и вновь открывается. Текущая позиция файла устанавливается к концу файла.

Чем отличается reset от rewrite

Здесь мы познакомимся с операциями, подготавливающие и завершающие работу с файлами.

Данные операции устанавливают/разрывают связь между файлом и программой, использующей этот файл, а также делают доступными программе элементы файла (открывают файл). Перечислим эти операции.

1. Процедура Assign служит для установления связи между файлом и файловой переменной. Может оказаться, что в программе нужно организовать работу одновременно с несколькими файлами. Естественно, в этом случае описываются несколько файловых переменных. Установкой соответствия между файлом и файловой переменной как раз "занимается" данная процедура. Ее общий вид:

Например, после выполнения следующей конструкции: Assign(k,'PR.DAT'); переменная k будет "связана" с файлом PR.DAT , то есть, указывая имя этой переменной, мы будем осуществлять работу с файлом PR.DAT .

2. Процедура Reset открывает файл для работы, то есть элементы файла становятся доступными программе. После выполнения процедуры Assign программа не может обращаться к элементам файла: они для нее еще "закрыты". Для "открытия" файлов как раз используется указанная процедура. Ее общий вид:

Например, после выполнения конструкции Reset (k); открывается файл PR.DAT (с учетом результата выполнения процедуры Assign ).

3. Процедура Rewrite также открывает файл для работы (для чтения/записи элементов). Зачем еще одна аналогичная процедура? Чем она отличается от предыдущей?

Например, после выполнения конструкции Rewrite (k); пересоздаётся файл PR.DAT (с учетом результата выполнения процедуры Assign ).

4. Процедура Close предназначена для закрытия файлов, то есть она "запирает" файл, и его элементы становятся недоступными программе. Общий вид этой процедуры:

Например, после выполнения процедуры Close(k); элементы файла PR.DAT становятся недоступными программе.

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

На следующем шаге после изучения процедур ввода/вывода информации мы продемонстрируем использование рассмотренных на этом шаге процедур.

Procedure Seek(var F; N: LongInt);

Перемещает текущую позицию файла к определенному компоненту. Вы можете использовать процедуру только с открытыми типизированными или нетипизированными файлами.

Текущая позиция файла F перемещается к номеру N. Номер первого компонента файла - 0.

Инструкция Seek(F, FileSize(F)) перемещает текущую позицию файла в конец файла.

Читайте также: