Какие типы данных файлов поддерживают Turbo Pascal

Обновлено: 24.11.2024

: Мне нужно написать программу со встроенной базой данных на турбо-паскале. Кто-нибудь знает, как это сделать? Требуется ввод o(-_-)o
:
: -steve-
:

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

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

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

Если вы хотите начать с чего-то простого, взгляните на
следующий пример:
[code]
program mini_database;
uses crt;

введите some_record = запись
first_name:string[40];
last_name:string[40];
initial:string[1];
телефон:строка[15];
адрес:строка;
конец;

var f:файл какой-либо_записи;
i,j:целое число;
записи: целое число;
образец:some_record;
dbase:array[1..50] of some_record;
с: символ;

процедура write_file;
начать
assign(f,file_name);
переписать(f);
для j:=1 в записи сделать
write(f,dbase[j]);
закрыть(f);
конец;

функция read_file:integer;
begin
assign(f,file_name);
сброс(f);
j:=1;
while ((j Имя:');readln(sample.first_name);
write('>Фамилия:');readln(sample.last_name);
write('> Initial :');readln(sample.initial);
write('>Номер телефона :');readln(sample.phone);
write('>Адрес :');readln( пример.адрес);
конец;

процедура delete_record;
начать
для j:=i с записей-1 do
dbase[j]:=dbase[j+1];
дек(записи);
конец;

процедура display_record(i:integer);
begin
writeln('Record Nr.',i,' records',records);
writeln('Имя: ',dbase[i].first_name);
writeln('Фамилия: ',dbase[i].last_name);
writeln('Инициал: ',dbase[i].initial);
writeln('Номер телефона : ',dbase[i].phone);
writeln('Адрес: ',dbase[i].address);
end;

меню процедур;
начать
i:=0;
записей:=0;
clrscr;
повторить
writeln('Мини-база данных v0.01');
написано;
writeln('Для использования используйте следующие ключи:');
writeln('1 : Создать новую запись');
writeln('2 : Чтение базы данных из файла');
writeln('3 : Сохранить файл базы данных');
writeln('4 : Предыдущая запись');
writeln('5 : Следующая запись');
writeln('- : Выйти');
writeln('9 : Удалить текущую запись (номер записи ',i,')');
написано;
display_record(i);
c:=readkey;clrscr;
случай c из
'1':begin
если записей 0, то i:=1; конец;
'3':write_file;
'4':если i>1, то dec(i);
'5':если я steveXP

Типы данных объекта указывают на значение, ограничения, возможные значения, операции, функции и режим хранения, связанные с ним.

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

Типы данных Паскаля

Типы данных Pascal можно обобщить, как показано ниже на следующей диаграмме —

Объявления типов

Объявление типа используется для объявления типа данных идентификатора. Синтаксис объявления типа —

Например, следующее объявление определяет переменные days и age как целочисленный тип, yes и true как логический тип, имя и город как строковый тип, а сборы и расходы как реальный тип.

Целые типы

В следующей таблице приведены подробные сведения о стандартных целочисленных типах с размерами их хранилищ и диапазонами значений, используемыми в Object Pascal —

Константы

Использование констант делает программу более читабельной и помогает хранить специальные количества в одном месте в начале программы. Паскаль допускает числовые, логические, строковые и символьные константы. Константы могут быть объявлены в части объявления программы, указав объявление const.

Синтаксис объявления константного типа следующий –

Ниже приведены некоторые примеры объявлений констант —

Все объявления констант должны быть указаны перед объявлением переменных.

Пронумерованные типы

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

Ниже приведены некоторые примеры объявлений перечислимых типов —

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

Типы поддиапазонов

Типы поддиапазона позволяют переменной принимать значения, лежащие в определенном диапазоне. Например, если возраст избирателей должен находиться в диапазоне от 18 до 100 лет, переменная с именем age может быть объявлена ​​как -

Мы подробно рассмотрим объявление переменных в следующем разделе. Вы также можете определить тип поддиапазона, используя объявление типа. Синтаксис для объявления типа поддиапазона следующий:

Ниже приведены некоторые примеры объявлений типа поддиапазона —

Типы поддиапазонов могут быть созданы из подмножества уже определенного перечисляемого типа, например —

Все время указано в формате UTC

Нужна подробная информация о ранних версиях Turbo Pascal


Кто-нибудь знает, где я могу найти спецификации для целочисленных (всех) и реальных (общих)
(нужны все) типов данных Turbo Pascal, выпущенных примерно в 1985 году?

> Кто-нибудь знает, где я могу найти спецификации для целочисленных (всех) и вещественных (общих) типов данных
> Turbo Pascal 1985 года
> (нужны все)?

Целое число всегда находилось в диапазоне -32768..32767. На старых компиляторах TP 1..3
не было
не Word (unsigned Integer) и Longint, не было ни Byte, ни Short 7+1 Integer.

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

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

> Заголовок .exe содержит '(c) 1985 Borland. ',
> так что, возможно, Borland к тому времени выпустила какой-нибудь другой компилятор(ы)
>? Любая помощь будет оценена.


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

Конечно, использовались Bytes, но в стандартных типах
не было типа Byte.
В Паскале можно легко сделать такой тип:
Type Byte = (0..255);
в исходном коде. И даже типы поддиапазонов занимают в записях не менее
целого байта.
Тип TDayOfWeek = (Вс,Пн,Чт,Ср. Сб);
SDayOfWeek = [Вс..Сб];
оба будут занимать один байт.

Все перечисленные типы, которые помещаются в 8 бит или менее, сохраняются
в одном байте. Все наборы с 8 или менее членами помещаются в один байт.
Каждая переменная char записывается в память в байте.

Это не имеет ничего общего с версией компилятора.

С уважением, Франц Глейзер

> > Кто-нибудь знает, где я могу найти спецификации для целочисленных (всех) и вещественных (общих)
>> типов данных Turbo Pascal (приблизительно 1985 г.)
>> (нужны все)?

> Целое число всегда находилось в диапазоне -32768..32767. На старых компиляторах TP 1..3
> не было
> ни Word (unsigned Integer), ни Longint, ни Byte, ни Short 7+1 Integer.

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

> Конечно, использовались Bytes, но в стандартных типах не было типа Byte
>.
> В Паскале можно легко сделать такой тип:
> Type Byte = (0..255);
> в исходном коде. И даже типы поддиапазонов занимают в записях как минимум
> целый байт.
> Введите TDayOfWeek = (Пн,Пн,Чт,Ср. Сб);
> SDayOfWeek = [Son..Sat];
> оба будут занимать один байт.

> Все перечисленные типы, которые помещаются в 8 бит или меньше, сохраняются
> в одном байте. Все наборы с 8 или менее членами помещаются в один байт.
> Каждая переменная char записывается в память в байте.

> Это не имеет ничего общего с версией компилятора.

> С уважением, Франц Глейзер

> Конечно, использовались Bytes, но в стандартных типах не было типа Byte
>.
> В Паскале можно легко сделать такой тип:
> Type Byte = (0..255);
> в исходном коде. И даже типы поддиапазонов занимают в записях как минимум
> целый байт.
> Введите TDayOfWeek = (Пн,Пн,Чт,Ср. Сб);
> SDayOfWeek = [Сын..Суббота];
> оба будут занимать один байт.

> Все перечисленные типы, которые помещаются в 8 бит или меньше, сохраняются
> в одном байте. Все наборы с 8 или менее членами помещаются в один байт.
> Каждая переменная char записывается в память в байте.

> Это не имеет ничего общего с версией компилятора.

> С уважением, Франц Глейзер

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

01 00 = 01
02 00 = 02
и т.д.
ХХ 00 = ХХ

(не обращайте внимания на 00 байт), но

ХХ ГГ = ХХ + 256 * ГГ

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

Программы, скомпилированные с использованием Turbo Pascal 3.0, содержат оператор

Авторское право (C) 1985 BORLAND Inc

> так что, возможно, к тому времени Borland выпустила какой-то другой компилятор(ы)
>? Будем признательны за любую помощь.

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

Старый процедурный стиль

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

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

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

Флаг обработки ошибок ввода-вывода указывает компилятору, как поступать в случае ошибки: создать исключение или сохранить результат ввода-вывода в переменной IOResult. Флаг обработки ошибок ввода/вывода является директивой компилятора. Чтобы включить или отключить его:

За счет подавления ошибок ввода-вывода () результаты файловых операций попадают в переменную IOResult. Это кардинальный (числовой) тип. Разные цифры означают разные ошибки. Поэтому вы можете проверить документацию на наличие различных ошибок[1].

Файловые процедуры

Эти процедуры и функции обработки файлов расположены в модуле System. Дополнительные сведения см. в документации FPC: Справочник для модуля «Система».

  • AssignFile (предотвращает использование старой процедуры Assign) — присвоение имени файлу
  • Добавить — открывает существующий файл для добавления данных в конец файла и его редактирования.
  • BlockRead — чтение данных из нетипизированного файла в память
  • BlockWrite — запись данных из памяти в нетипизированный файл
  • CloseFile (предотвратить использование старой процедуры Close) — закрыть открытый файл.
  • EOF – проверка на конец файла
  • Стереть – стереть файл с диска.
  • FilePos — получение позиции в файле
  • FileSize — получить размер файла
  • Flush — запись файловых буферов на диск
  • IOResult — возвращает результат последней операции ввода-вывода с файлом.
  • Чтение – чтение из текстового файла.
  • ReadLn — чтение из текстового файла и переход к следующей строке.
  • Сброс – открывает файл для чтения.
  • Переписать — создать файл для записи
  • Искать – изменить положение в файле
  • SeekEOF – установить положение файла в конец файла
  • SeekEOLn – установить положение файла в конец строки
  • Truncate — обрезать файл в нужном месте.
  • Запись – запись переменной в файл.
  • WriteLn — запись переменной в текстовый файл и переход на новую строку

Пример

Полный пример обработки текстового файла типа TextFile:

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

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

Вот как работает добавление текста в текстовый файл:

Чтение текстового файла:

Стиль объекта

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

Кроме того, большинство классов обработки строк имеют возможность загружать и сохранять содержимое из/в файл.Эти методы обычно называются SaveToFile и LoadFromFile. Многие другие объекты (например, сетки Lazarus) имеют аналогичную функциональность, включая наборы данных Lazarus (DBExport). Стоит просмотреть документацию или исходный код, прежде чем пытаться создать собственные процедуры сохранения/загрузки.

Общие файлы любого типа

Для открытия файлов для прямого доступа можно использовать TFileStream. Этот класс является инкапсуляцией системных процедур FileOpen, FileCreate, FileRead, FileWrite, FileSeek и FileClose, находящихся в модуле SysUtils.

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

В приведенном ниже примере обратите внимание, как мы инкапсулируем действие обработки файла с помощью блока try..except, чтобы ошибки обрабатывались правильно, как и в случае с классическими процедурами обработки файлов (чтобы не запутывать пример, fsOut.write не является поместите внутрь блока try. finally).


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

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

ФайлКопировать

Используя вышеизложенное, мы можем реализовать простую функцию FileCopy (у FreePascal ее нет в RTL, хотя у Lazarus есть copyfile) — при необходимости настроить для больших файлов и т. д.:

Обработка текстовых файлов (TStringList)

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

Демонстрация: сохранение одной строки в файл

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

Обработка файлов в режиме ISO

Параметры командной строки

Первый способ назначить внешние файлы внутренним в режиме iso — это параметры командной строки в соответствии с порядком их появления. Пример:

Программа скомпилирована с помощью fpc -Miso isotest1.pas и запускается с ./isotest1 externa1l.txt external2.dat . files1 назначается external1.txt, а file2 — external2.dat. Без параметров командной строки файлы назначаются на стандартный ввод и стандартный вывод. Пока есть только один файл для ввода и один для вывода, такое же назначение может быть достигнуто с помощью этой команды: ./isotest1 external2.dat . файл1 должен существовать до запуска, будет создан файл2.

Прозрачные имена файлов

Второй вариант — это прозрачные имена файлов, достигаемые с помощью параметра компилятора -Sr. Пример:

Если программа скомпилирована с помощью fpc -Miso -Sr isotest2.pas и запущена без параметров командной строки, внешние файлы FILE1.txt и FILE2.txt читаются и записываются. Обратите внимание на преобразование внутренних имен файлов в верхний регистр. Файлы с другими именами по-прежнему можно использовать с помощью параметров командной строки.

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

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

Если ваш язык программирования не имеет интерфейса, проверьте, поддерживает ли ваш компилятор вызовы смешанных языков. Если это так, вы можете использовать интерфейс C.

• Большинство компиляторов C/C++, включая Embarcadero, Microsoft и WATCOM.
Этот интерфейс обеспечивает поддержку нескольких платформ.

В следующей таблице представлено сравнение некоторых распространенных типов данных, используемых в буферах данных для операций Btrieve, таких как Create и Stat.

1 Значение целых чисел зависит от среды, в которой вы разрабатываете. В 32-разрядных средах целые числа совпадают с длинными целыми числами. В 16-разрядных средах целые числа аналогичны коротким или малым целым числам.

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

Хотя вы должны указывать все параметры при каждом вызове, MicroKernel не использует каждый параметр для каждой операции. Более подробное описание параметров, относящихся к каждой операции, см. в Руководстве по API Btrieve.

Интерфейс C/C++ упрощает написание приложений, не зависящих от платформы. Этот интерфейс поддерживает разработку в DOS, Windows, Linux и macOS.Эти модули также описаны в таблице 23.

Файл BTRAPI.C является фактической реализацией интерфейса приложения C. Он обеспечивает поддержку всех приложений, которые вызывают BTRV и BTRVID. Выполняя вызов Btrieve с любой из этих функций, скомпилируйте BTRAPI.C и свяжите его объект с другими модулями вашего приложения.

Файл BTRAPI.H содержит прототипы функций Btrieve. В определениях прототипов используются независимые от платформы типы данных, определенные в файле BTITYPES.H. BTRAPI.H поддерживает все приложения, вызывающие функции BTRV и BTRVID.

Файл BTRCONST.H содержит полезные константы, специфичные для Btrieve. Эти константы могут помочь вам стандартизировать ссылки на коды операций Btrieve, коды состояния, флаги спецификаций файлов, флаги спецификаций ключей и многое другое.

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

Файл BTITYPES.H определяет типы данных, не зависящие от платформы. Используя типы данных в BTITYPES.H при вызовах функций Btrieve, ваше приложение переносится между операционными системами.

BTITYPES.H также описывает переключатели, которые вы должны использовать для указания операционной системы, в которой работает ваше приложение. В Таблице 25 перечислены эти переключатели операционной системы.

32-разрядная версия с Tenberry Extender и BStub.exe

32-разрядная версия с Phar Lap 6

32-разрядная версия с Embarcadero PowerPack

Исходный файл BTRSAMP.C представляет собой пример программы Btrieve, которую можно скомпилировать, скомпоновать и запустить в любой из операционных систем, описанных в таблице 25.

Если вы используете интерфейс приложения C, чтобы сделать ваше приложение независимым от платформы, вы должны использовать типы данных, описанные в BTITYPES.H. Чтобы узнать, как используются эти типы данных, см. файл BTRSAMP.C.

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

Файл BTRAPI.C представляет собой реализацию интерфейса приложения C. Этот файл также содержит интерфейс DOS:

BTRAPI.C обеспечивает поддержку всех приложений, которые вызывают BTRV и BTRVID. Выполняя вызов Btrieve с любой из этих функций, скомпилируйте BTRAPI.C и свяжите его объект с другими модулями вашего приложения.

Файл BTRAPI.H содержит прототипы функций Btrieve. В определениях прототипов используются независимые от платформы типы данных, определенные в файле BTITYPES.H. BTRAPI.H поддерживает все приложения, вызывающие функции BTRV и BTRVID.

Файл BTRCONST.H содержит полезные константы, специфичные для Btrieve. Эти константы могут помочь вам стандартизировать ссылки на коды операций Btrieve, коды состояния, флаги спецификаций файлов, флаги спецификаций ключей и многое другое.

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

Файл BTITYPES.H определяет типы данных, не зависящие от платформы. Используя типы данных в BTITYPES.H при вызовах функций Btrieve, ваше приложение переносится между операционными системами.

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

32-разрядная версия с Tenberry Extender и BStub.exe 1

32-разрядная версия с Phar Lap 6

32-разрядная версия с Embarcadero PowerPack

BTRAPID.PAS содержит реализацию исходного кода интерфейса приложения Pascal для DOS. Этот файл обеспечивает поддержку приложений, вызывающих функции Btrieve.

Для того, чтобы Turbo Pascal правильно скомпилировал и связал MicroKernel Engine с другими модулями вашего приложения, вы можете скомпилировать BTRAPID.PAS для создания модуля Turbo Pascal, который вы затем перечислите в разделе использования исходного кода вашего приложения.

Файл BTRCONST.PAS содержит полезные константы, специфичные для Btrieve. Эти константы могут помочь вам стандартизировать ссылки на коды операций Btrieve, коды состояния, флаги спецификаций файлов, флаги спецификаций ключей и многое другое.

Чтобы использовать BTRCONST.PAS, вы можете скомпилировать его для создания модуля Turbo Pascal, который вы затем перечислите в разделе использования исходного кода вашего приложения.

Вы можете использовать интерфейс приложения Pascal без использования BTRCONST.PAS; однако использование этого файла может упростить ваши усилия по программированию.

Примечание. Если ваше приложение использует структуры записей Pascal, которые содержат варианты строк, учтите, что элементы нечетной длины в записи Pascal могут потребовать дополнительного байта памяти (даже если запись не упакована). Это важное соображение при определении длины записи для операции Create (14). Дополнительную информацию о типах записей см. в справочном руководстве по Pascal.

В случае Visual Basic этот язык выравнивает элементы по различным кратным битам. В следующей таблице представлены различные типы данных и показано, как Visual Basic их обрабатывает:

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