Чем отличаются текстовые файлы от типизированных

Обновлено: 07.07.2024

Файл, определенный стандартным или пользовательским типом данных, называется типизированным. Общая форма объявления типизированных файлов имеет вид:

Var <имя файла>: File of <тип компонент>;

Здесь тип компонент может быть любым типом данных, определенных в Pascal, но только не файловым. Для работы с типизированными файлами используются уже знакомые нам процедуры и функции: Write, Read, Seek, Filesize, Filepos, а также процедура Truncate:

Truncate(<имя файловой переменной>)

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

Одной из главных особенностей типизированного файла является возможность прямого обращения к его отдельным компонентам. Это достигается за счет, того что заранее известен тип компонент файла. Рассмотрим два примера кода, в первом из которых обращение к элементам файла происходит последовательно, а во втором прямо.

Пример 1.

Вычислить среднее арифметическое элементов файла.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

Пример 2.

Поменять строки в файле местами.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

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

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

Бестиповые файлы предназначены для записи участков памяти компьютера на внешний носитель и считывания их в память. В отличие от типизированных файлов, нам не нужно знать информация какого типа хранится в них. А все потому, что данные из файлов, не имеющих типа, считываются в виде байт, после чего они «подстраиваются» под переменную, в которую происходит считывание.

Общая форма записи нетипизированных файлов

отличается от типизированных отсутствием части of <тип данных>. Кроме того, немного изменяется принцип действия процедур Reset и Rewrite. К ним прибавляется второй параметр типа Word:

reset(<имя файловой переменной>, <значение>)

rewrite(<имя файловой переменной>, <значение>)

Здесь «значение» — это новый размер буфера, который по умолчанию равен 128 байтам. В качестве минимального значения можно указать 1 байт, а максимального — 64 кбайт (число в байтах).

Также в бестиповых файлах для записи и чтения информации используются не стандартные процедуры Read и Write, а две новые: BlokRead и BlockWrite. Рассмотрим каждую из них.

Процедура BlockRead

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

Общая форма записи:

BlockRead(<имя файловой переменной>, <x>, <количество байт>, <y>);

x, y – обычные переменные, в первую помещается прочитанные данные, во вторую – количество считанных байт. В случае удачи y (y – необязательный параметр) будет иметь тоже значение, что и третий параметр.

Процедура BlockWrite

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

BlockWrite(<имя файловой переменной>, <x>, <количество байт>, <y>);

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

В следующей программе данные сначала записываются в нетипизированный файл, а затем выводятся из него посредством рассмотренных нами операций.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

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

Занятие 1. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.

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

Во многих версиях языка допускается хранение файлов на диске как символьных данных. При считывании файла в оперативную память машины символы файла преобразуются в тот тип данных, который объявлен в программе. Файлы символьных данных называются текстовыми файлами. Текстовые файлы имеют тип text.

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

Его можно схематически представить в следующем виде:

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

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

Примечание . Слово text не является зарезервированным словом, а считается идентификатором стандартного типа, наряду с идентификаторами integer, real и т.д.

Обращение к файлу в дальнейшем идёт через файловую переменную.

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

К примеру, пусть на диске создан текстовой файл text.txt.

Для Turbo Pascal описание и связывание файловой переменной f с файлом text.txt, будет выглядеть так :

assign ( f , ' d :\ tp 7\ bin \ text . txt ');

assign([файл. пер. ], [полный путь до файла на диске])–связывает файл на диске с файловой переменной f типа текст.

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

Когда имя файла на диске не указывается, то параметр f оказывается связанным со стандартным вводом/выводом. Если присвоено пустое имя, то после обращения к reset(f) f будет указывать на стандартный файл ввода, а после обращения к rewrite(f) f будет указывать на стандартный файл вывода.

reset([ файловая переменная ]); –открывает файл на чтение.

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

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

Во-вторых, обмены с текстовыми файлами всегда являются строго последовательными, то есть после чтения из файла элемента с порядковым номером N следующая операция чтения даст элемент с номером N+1. Иными словами, прямой доступ к любому элементу текстового файла невозможен; для текстовых файлов не допускаются вызовы Seek, FilePos, FileSize.

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

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

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

while not Eof(f) do

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

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

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

while not Eof(f) do

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

- значения целого типа;

- значения вещественного типа;

- значения булева типа.

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

Program TextFile 3;

for i := 8 to 12 do

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

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

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

Занятие 2. Способы обмена с текстовыми файлами.

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

Операции чтения из файла

reset(f) - открывает существующий файл на чтение. Файловая переменная должна быть связана с внешним файлом с помощью процедуры assign.

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

Если f было присвоено пустое имя (например, assign((f),' '), то после обращения к процедуре Rezet(f) будет ссылкой на стандартный файл ввода (канал 0).

Текстовой файл становится доступным только по чтению.

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

readln([f : text],[v 1 ,v 2 . v n ]) – выполняет процедуру read, затем переходит к следующей строке файла.

Процедура readln является расширением процедуры read и определена для текстовых файлов. Вызов readln(f) без параметров приводит к перемещению текущей позиции файла на начало следующей строки, если она имеется, в противном случае происходит переход к концу файла. Процедура readln без параметров полностью соответствует стандартному вводу.

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

Примечание : Функция работает только для тектовых файлов, включая стандартный ввод. Файл должен быть открыт для ввода.

Процедура readln является очень удобным аналогом read. В случае использования readln после чтения из файла очередной порции символов (и, быть может, преобразования их в значение подходящего типа) текущий указатель файла будет перемещен на начало его следующей строки. Иными словами, часть строки после прочитанного значения будет пропущена.

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

Операции записи в файл

rewrite(f) - cоздаёт и открывает новый файл. Файловая переменная должна быть связана с внешним файлом с помощью процедуры assign.

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

Если f было присвоено пустое имя (например, assign((f),' '), то после обращения к процедуре rewrite(f) будет ссылкой на стандартный файл вывода (канал 1).

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

write([f : text],[v 1 ,v 2 . v n ]) – записывает одно или более значений из одной или более переменных в текстовой файл.

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

Параметр v имеет вид:

<вводимое выражение : мин.размер : десятичных знаков>

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

writeln([f : text],[v1,v2. vn]) – выполняет процедуру write, а затем записывает в файл метку конца строки (перевод строки).

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

Примечание : файл должен быть открыт для вывода.

Логическая функция Eoln

Часто для обработки текстовых файлов используется специфичная для них функция Eoln, позволяющая определить достигнут ли конец строки. Если достигнут – значение функции равно True, а если нет – False. Таким образом, для анализа конкретных символов строк файла можно применить вложенный цикл типа:

while not Eof(NameFale) do

while not Eoln(NameFale) do

Процедура открытия файла для дополнения

append(f : Тext) – процедура открывает существующий файл для присоединения. Если файл уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла.

Если в последнем блоке файла размером 128 байтов присутствует символ Сtrl+Z (26 в коде ASCII), то текущая позиция устанавливается в файле таким образом, что при записи первым в блоке будет "затираться" символ Сtrl+Z.

Если переменной f было присвоено пустое имя assign(f,' '), то после обращения к процедуре append f будет указывать на стандартный выходной файл.

После обращения к append файл f становится доступным только по записи и Eof(f) принимает всегда значение True(истина).

Рассмотрите несколько примеров простых программ.

Program TextFile 4;

Put1, Put2, d: string;

assign ( t , Put 2);

while Not Eof(f) Do

while Not Eoln(f) do

while Not Eof(f) d o

for i := 1 to Length(s) do

assign ( f , ' text . txt ');

writeln(f, 'Исходный текст');

writeln(f, 'Добавляемый текст');

Задачи для самостоятельной работы

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

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

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

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

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

Занятие 3. Стандартные текстовые файлы Input и Output. Примеры задач

В Паскале существуют два стандартных текстовых файла Input и Output. Эти файлы считаются известными в любой Pascal-программе (иными словами, они описаны в стандартном модуле System). Они обозначают (по терминологии MS-DOS) соответственно стандартный файл ввода и стандартный файл вывода. Обычно эти стандартные файлы связаны с конкретными физическими устройствами компьютера. Так, файловая переменная Input связана с клавиатурой, файловая переменная Output – с экраном дисплея. эти файлы считаются заранее открытыми, а соответствующие идентификаторы можно использовать в операциях ввода-вывода.

Рассмотрим, например, следующий оператор:

writeln (Output, 'Результат равен ', (X+Y)*2)

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

Аналогично, оператор read (Input, X1, X2); будет выполняться таким образом: система перейдет в состояние ожидания ввода с клавиатуры двух значений. Типы вводимых значений должны совпадать с типами переменных Х1 и Х2. Эти значения при вводе должны отделяться друг от друга одним или несколькими пробелами, а ввод должен быть завершен нажатием клавиши Enter. В процессе ввода значений набираемые на клавиатуре символы отображаются на экране. После нажатия Enter введенные значения будут присвоены переменным Х1 и Х2, и выполнение программы будет продолжено.

Для стандартных файлов Input и Output допускается сокращенная форма записи операций ввода-вывода. Так, если в процедурах read и readln первый параметр опущен, то по умолчанию подразумевается файл Input. Аналогично, отсутствие в процедурах write и writeln первого параметра означает вывод в стандартный файл Output. Вывод в стандартный файл Output используется очень часто – всегда, когда необходимо выдать некоторую информацию из программы на экран.

В соответствии с общими правилами MS-DOS стандартные файлы ввода-вывода могут быть "переназначены", то есть связаны с другими физическими устройствами или дисковыми файлами. Простейшим способом переназначения является использование для этой цели процедуры assign, например,

assign ( Output ,' MyFile . out ')

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

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

Примечание . Если Вы можете решить выше поставленные задачи устно, то поставьте в известность учителя и приготовьтесь к ответу.

Теоретический материал: файловый ввод-вывод (Паскаль)

Файлы. Виды файлов. Основные процедуры для работы с файлами

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

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

Определение. Файлом называется область памяти на диске, имеющая свое имя.

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

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

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

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

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

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

С каждым файлом можно связать понятие "текущий указатель". Это неявно описанная переменная, которая указывает на конкретный элемент файла. Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который "смотрит" текущий указатель, перемещающийся в результате выполнения действия на следующий элемент.

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

- описать переменную файлового типа;

- связать ее с конкретным физическим файлом процедурой assign;

- открыть файл процедурой reset или rewrite;

- выполнить чтение или запись информации;

- по окончании работы с файлом закрыть файл процедурой close.

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

Процедуры и функции для работы с файлами любого типа

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

Сначала рассмотрим процедуры модуля System.

Напомним, что он подключен к программам по умолчанию, то есть его не требуется подключать к программе в разделе Uses.

До начала работы с файлами устанавливается связь файловой переменной МуFilе с именем дискового файла. Очень важно различать собственно файл (область памяти на магнитном носителе с некоторой информацией) и переменную файлового типа в Turbo Pascal-программе. Считается, что файловая переменная является представителем некоторого дискового файла в программе. Для того, чтобы реализовать доступ к файлу на магнитном диске, программа должна связать его с файловой переменной. Для этого необходимо установить соответствие между переменной и именем файла. Это имя представляется в виде строки, содержащей имя файла и, может быть, путь к файлу, который формируется по общим правилам MS-DOS.

здесь приведено полное (с указанием пути) имя пользовательского файла Result.dat.

Если путь не указан, программа будет искать файл только в своем рабочем каталоге и, как это принято в системе DOS, по указанным в файле аutoехес.bat путям. Кроме указания имени файла на дисковом накопителе может быть указано стандартное имя одного из устройств ввода-вывода: «соn» - консоль, то есть дисплей и клавиатура, «рrn» - или «lpt1» - принтер.

Не разрешается связывать с одним физическим файлом разные файловые переменные программы.

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

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

Внимание! Нельзя применять процедуру assign к открытому файлу.

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

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

Открытие нового файла производится процедурой, единственный аргумент которой - переменная файлового типа, например:

Эта процедура создает на диске файл с именем, связанным с переменной МуFilе процедурой Аssign. Указатель работы с файлом устанавливается на начало файла. После выполнения процедуры rewrite файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для записи).

Внимание! Если файл с таким именем уже существует, он удаляется (его содержимое теряется), и создается новый пустой файл с данным именем.

Открытие существующего файла выполняет процедура

Эта процедура ищет уже существующий файл на диске и открывает его для работы, помещая указатель в начальную позицию. Если файл с установленным в Аssign именем не найден, возникает ошибка ввода/вывода, контроль которой зависит от директивы компилятора (смотрите здесь). После выполнения процедуры reset файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для чтения).

Запись в файл производится процедурой

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

Чтение из файла производится аналогичной процедурой:

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

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

Функция FileSize(МуFilе) определяет число элементов в файле. Функция неприменима к текстовым файлам. Файл MyFyle должен быть открыт.

Функция логического типа ЕОF(МуFilе) имеет значение Тruе, если указатель указывает на маркер конца файла (End Of File).


Всем привет! Меня зовут Егор, я фронтенд-разработчик в Райффайзенбанке. В этой статье я хочу показать, как благодаря типизированным массивам мы можем взаимодействовать с бинарными данными в браузере. В качестве примера мы напишем приложение для шифрования текста внутрь изображения и посмотрим, как работают типизированные массивы.

Введение

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

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

Для начала определим, что должно уметь наше приложение:

Работа с изображением

Для реализации приложения нам понадобится описание BMP-формата, которое достаточно подробно описано в «Википедии».

Описание заголовка BITMAPCOREHEADER

Отметка для отличия формата от других (сигнатура формата).

Возможные значения: BM, BA, CI, CP, IC, PT

Размер файла в байтах

Зарезервированы. Должны содержать ноль

Начальный адрес байта, в котором могут быть найдены данные растрового изображения (bitmap data)

Что мы узнаем из описания этого формата?

По соображениям совместимости большинство приложений используют старые заголовки DIB для сохранения файлов. Поскольку OS / 2 больше не поддерживается после Windows 2000, на данный момент распространенным форматом Windows является заголовок BITMAPINFOHEADER

Поэтому во внимание берем только заголовок BITMAPINFOHEADER и сигнатуру BM.

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