Работа с нетипизированными файлами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с нетипизированными файлами



Как отмечалось выше, при работе с нетипизированными файлами данные из них считываются и записываются в них побайтно. Такие файлы допускается обрабатывать как последовательность байтов, не имеющую строгой внутренней структуры. Для этого в системе Delphi применяют процедуры блочного ввода/вывода: BlockRead (парамер 1, параметр 2, параметр 3, параметр 4) и BlockWrite (парамер 1, параметр 2, параметр 3, параметр 4).

Параметр 1 – имя и тип файла, открытого для записи или считывания. Оформляется обычным образом: var F: File;

Параметр 2 – произвольная переменная, которая записывается в файл или служит для хранения данных, считываемых из файла. Переменная оформляется обычным образом: var А: real;

Параметр 3 – число блоков считываемой или записываемой информации. Оформляется следующим образом: var Count:integer; Если размер блока измеряется в байтах, то параметр будет содержать число байт.

Параметр 4 – необязательный, необходимый для хранения числа реально считанных или записанных блоков. Оформляется так: var Amt Transferred: integer;

Например,

Procedure BlockWrite (F, M, Count, Amt Transferred).

Установка новой позиции в файле

Считывание из файла информации или запись ее в файл происходит последовательно, блок за блоком. Если же требуется, например, считать 5 запись из файла, содержащего 10 записей, или изменить ее, не перезаписывая все остиальное, то можно воспользоваться процедурой Seek (параметр 1, параметр 2). Параметр 1 – используемая файловая переменная. Параметр 1 оформляется обычным способом. Параметр 2 – номер записи в файле, с которой будет начинаться операция считывания или перезаписи. Этот параметр называется позицией в файле. В случае нетипизированного файла этот параметр определяет номер байта, с которого начинается чтение или запись информации. Параметр 2 оформляется так: имя переменной: тип. Например, N:lоngint.

Нумерация записей в файле начинается с нуля.

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

Следует отметить, что при использовании процедуры Seek файл следует открывать процедурой Reset, а не процедурой Rewrite, которая при открытии сразу же уничтожит все данные из файла.

Задание на работу

а) Необходимо разработать проект, в котором:

- в поле Memo формы вводится число; при нажатии на кнопку Решение в объект Label выводится результат, полученный прибавлением к веденному числу некоторой константы;

- результат вычисления записывается в файл.

б) Необходимо разработать проект, в котором:

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

2.1.3 Выполнение задания на работу

Для реализации проекта а) задания на работу требуется создать новую форму, например, VCL Forms Application – Delphi for Win32 или другую в зависимости от версии системы Delphi. Озаглавить форму можно «Расчет».

Необходимо вынести на форму компонент Edit1, удалив из компонента Edit1 внутреннюю надпись (Инспектор объектов (Inspector Object), свойства (Properties) – Text).

При помощи компонента Label1 требуется подписать компонент Edit1, например, «Ввод данных».

Далее на форму выносится компонент Button1. Компонент Button1 (созданную кнопку) можно подписать «Решение».

При помощи компонента Label 2 требуется внести на форму надпись «Ответ».

Указанные компоненты расположены на палитре компонентов Стандартные (Standart).

На рисунке 32 показана созданная форма и установленные на нее вышеуказанные компоненты.

Рисунок 32 – Форма с компонентами

Далее требуется перейти в код формы (двойной клик по кнопке Решение) и в процедуре procedure TForm1.Button1Click(Sender: TObject) перед словом begin описать две переменных типа real.

Ниже описания переменных следует описать файловую переменную типа real.

В той же процедуре после слова begin следует перевести одну из двух введенных переменных из строкового типа в числовой тип real. Например, если переменная носила название A, часть кода будет выглядеть следующим образом: A:=strtofloat(edit1.Text). Введенный код означает присвоение тексту, вводимого в поле Edit1, числового типа вместо текстового. В поле Edit1 будет вводиться число и записываться в переменную A.

После этого необходимо создать файл типа real. Логическая часть жесткого диска, каталоги и название файла указывается самостоятельно. Расширение файла следует выбрать dat.

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

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

После указанных действий требуется вывести значение полученной переменной в компоненту label2. Например, если вторая введенная переменная носила имя В, то часть кода будет выглядеть следующим образом: label2.caption:=floattostr(В).

После этого файл можно закрыть.

Далее следует откомпилировать и запустить программу, а затем сохранить проект.

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

На рисунке 33 показан примерный код программы.

Рисунок 33 – Примерный код программы в соответствии

с пунктом а) задания на работу

На рисунке 34 показан созданный файл, имеющий название file и располагающийся на диске d в каталоге catalog1.

Рисунок 34 – Созданный файл типа real

На рисунке 35 показана форма после запуска программы и вывода результатов.

Рисунок 35 – Форма после запуска программы и вывода результатов

Для реализации проекта б) необходимо создать еще одну форму, например, с названием «Запись».

Далее не вынося на форму объектов, необходимо прописать код, позволяющий создавать нетипизированный файл. При этом, чтобы перейти в код формы, необходимо в Инспекторе объектов выбрать закладку Events, найти строку onShow и произвести двойной клик мышью в пустом поле напротив строки onShow. Откроется код пустой формы.

После этого необходимо записать в нетипизированный файл несколько произвольных символов.

На рисунке 36 представлен код программы, создающей нетипизированный файл в указанном каталоге и записывающей в созданный файл символ с кодом $41 в количестве 100 раз. Значение кода $41 в шестнадцатеричном формате соответствует символу А.

Рисунок 36 – Примерный код программы в соответствии

с пунктом б) задания на работу

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

На рисунке 37 показано содержимое нетипизированного файла в соответствии с кодом, представленным на рисунке 36.

Рисунок 37 – Содержимое нетипизированного файла

Код программы, позволяющей изменить в нетипизированном файле произвольный по счету символ на любой другой, представлен на рисунке 38. На рисунке 38 представлен код программы, заменяющий одиннадцатый по счету символ А в файле на символ В. В шестнадцатеричном коде при кодировании текстовой информации символ $42 соответствует символу В.

Рисунок 38 – Примерный код программы замены символа

На рисунке 39 представлен результат выполнения фрагмента программы, представленного на рисунке 38.

Рисунок 39 – Содержимое нетипизированного файла после изменений

После указанных действий требуется сохранить проект.

2.1.4 Контрольные вопросы

1 Что такое нетипизированный файл? Для чего он необходим? Как его создавать в системе Delphi?

2 Какая процедура в системе Delphi позволяет создать файл?

3 Какая процедура в системе Delphi позволяет открыть файл?

4 Какая процедура в системе Delphi позволяет записывать данные файл?

5 Какая процедура в системе Delphi позволяет считывать данные из файла?

6 Какая процедура в системе Delphi позволяет закрыть файл? Что такое процедуры блочного ввода/вывода? Для чего они применяются?

7 Как установить новую позицию в файле при записи в него данных или считывании информации?

8 Как отредактировать файл, не перезаписывая все существующие в нем данные?

9 Что означают в шестнадцатеричном коде при кодировании текстовой информации символы $41, $42?

10 Может ли существовать проект, созданный в системе Delphi, если на форму не вынесено никаких объектов.

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

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

Создание текстового файла

В системе Delphi имеется тип файлов, используемый при работе со строками. Он называется Textfile. В таких файлах считывание и запись происходит построчно, причем символы перевода строки и возврата каретки используются как управляющие. Для этих файлов организованы две процедуры, осуществляющие ввод/вывод с новой строки: Readln и Writeln. Размер считанной строки определяется автоматически, исходя из наличия управляющих символов, которые в саму строку не записываются. Если применить процедуры Read и Write, то считывание и запись текста будут производиться сплошным потоком, без разделения на строки.

Процедура создания текстового файла аналогична процедуре создания файла пользовательского типа или нетипизированного файла. В качестве расширения текстового файла принято указывать расширение txt.

Открытие текстового файла в режиме записи

Для открытия текстового файла можно использовать те же процедуры, что и для открытия файла пользовательского типа или нетипизированного файла: Rewrite – для записи, Reset – для чтения.

В системе Delphi существует еще одна процедура, позволяющая открывать текстовый файл: Procedure Append (var F, Text). От процедуры Rewrite отличается тем, что не стирает все содержимое при открытии, поскольку автоматически устанавливает текущую позицию в конец файла, что позволяет добавлять в файл информацию.

Печать текстового файла

Procedure AssignPrtnt (var F, Text). Вся информация, записываемая в файл, перенаправляется на принтер. Файл должен быть открыт при помощи процедуры Rewrite.

Удаление текстового файла

Procedure Erase (var F, Text). Он должен быть определен с помощью процедуры AssignFile, но не должен быть открыт.



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 451; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.228.35 (0.022 с.)