Ошибка Delphi 2006 в EOLN
Я думаю, что в функции EOLN в D2006 (WIN 32) есть ошибка в применении к текстовым файлам с типом разрыва строки (LF) Unix, когда этот LF является первым символом во входном буфере. Источником ошибки является строка
который должен правильно читать
Поле Flags хранит стиль линейного тормоза, а не поле Mode, в котором сохраняется режим ввода/вывода.
Над строкой находится часть фрагмента ниже из блока Sytem, который вызывается, когда буфер необходимо пополнить. Ошибка остается незамеченной, поскольку поле Mode является нечетным числом для входных файлов (это режим, в котором обычно используется EOLN)
соответствует только бит, установленный в tfCRLF (= 1) для Windows, созданных текстовыми файлами. У более поздних версий Delphi все еще есть такое же кодирование для EOLN?
Другое любопытство: эта функция EOLN, применяемая к типу файла Windows (CRLF), на самом деле проверяет только CR, как если бы там, где был установлен (старый?) Mac файл, не указано LF ниже!?
Ошибка Delphi 2006 в EOLN
Я думаю, что есть ошибка в функции EOLN в D2006 (WIN 32) при применении к текстовым файлам с Unix-типом разрыва строки ( LF ), когда этот LF является первым символом во входном буфере. Источником ошибки является строка
который должен правильно читать
Это поле Flags, в котором хранится стиль линейного торможения, а не поле Mode , в котором хранится режим ввода / вывода.
Над строкой находится фрагмент фрагмента ниже из системы Sytem , который вызывается, когда необходимо заполнить буфер. Ошибка остается незамеченной, потому что поле Mode является нечетным числом для входных файлов (это режим, в котором обычно используется EOLN )
совпадение с единственным битом, установленным в tfCRLF (= 1) для сгенерированных Windows текстовых файлов. Новые версии Delphi по-прежнему имеют ту же кодировку для EOLN ?
Еще одно любопытство: эта функция EOLN , применительно к типу файлов Windows ( CRLF ), на самом деле проверяет только CR , как если бы он находился в (старом?) Mac-файле, для которого не проверяется следующее LF !?
1 ответ
Не было фиксированный в 2007.
Вот код из Delphi 2007
Исправлено в XE6
В Delphi XE6 используется чистая версия Pascal, которая также правильно проверяет t.Flags.
(Очевидно, в противном случае он не будет компилироваться).
Я не проверял на предмет регрессий между ними.
Функции Delphi модуля System
Модуль System
Предлагаем список функций модуля System, используемого в среде разработки Delphi.
Abs Предназначена для получения абсолютной величины числа
Addr Возвращает адрес переменной, функции или процедуры
ArcTan Арктангенс числа, возвращается в радианах
Assigned Осуществляет проверку функциональности указателей, объектов, методов
BeginThread Начинает отдельный поток выполнения кода
Chr Конвертирует целое число в символ
Concat Соединяет несколько строк в одну
Copy Создает копию части строки или части массива
Cos Косинус числа
Eof Возвращает true, если позиция курсора находится в конце файла открытого с помощью Reset
Eoln Возвращает true, если позиция курсора находится в конце строки
Exp Выдаёт экспоненту числа
FilePos
FileSetDate Установка даты и времени последнего изменения файла
FileSize Выдает размер открытого файла в записях
GetLastError Выдаёт код ошибки последнего неудачного Windows API вызова.
GetMem Получает указанное число байтов памяти.
Hi Возвращает байт старшего разряда от типа Integer.
High Возвращает самое высокое значение типа или переменной
Int Целая часть числа с плавающей точкой
IOResult Содержит возвращаемый код последней операции ввода/вывода
IsMultiThread Возвращает True, если код выполняет множество потоков
Length Возвращает число элементов в массиве или строке
Ln Выдает натуральный логарифм числа
Lo Возвращает младший байт целого числа (2-байтового)
Low Возвращает самое низкое значение типа или переменной
Odd Провеяет, является ли целое число нечетным
Ord Порядковое значение целого числа, символа или перечисления
ParamCount Выдает число параметров переданной текущей программе
ParamStr Возвращается один из параметров используемых для запуска текущей программы
Pi Математическая константа
Pos Находит позицию одной строки в другой
Pred Уменьшает порядковую переменную
Random Генерирует случайное целое число или число с плавающей запятой
Round Округление чисел с плавающей запятой до целого числа
RunError Заканчивает программу с диалогом ошибки
SeekEof Пропускает символы, пока не встретится конец файла
SeekEoln Пропускает символы, пока не встретится конец текущей строки или файла
Sin Синус числа
SizeOf Возвращает занимаемый размер типа или переменной в байтах
Slice Создает часть массива с параметром «Открытый Массив»
Sqr Возвращает квадрат числа
Sqrt Возвращает квадратный корень числа
StringOfChar Создает строку из одного символа, повторенного много раз
StringReplace Заменяет одну или несколько подстрок, найденных в заданной строке
StringToWideChar Преобразует обычную строку в WideChar-буфер с завершающим 0
Trunc Целая часть числа с плавающей запятой
UpCase Преобразует значение Char к верхнему регистру
WideCharToString Копирует строку WideChar, заканчивающуюся нулём, в нормальную строку
Append Открывает текстовый файл, для добавления записей в файл (добавляет в конец файла)
Assign Назначает дескриптор файла на бинарный или текстовый файл
AssignFile Связывает дескриптор файла с бинарным или текстовым файлом
BlockRead Читает блок записей данных из нетипизированного двоичного файла
BlockWrite Записывает блок записей данных в нетипизированный двоичный файл
Break Выполняет выход из одного цикла
ChDir Выбор диска и директории ( папки ), в которой будет производиться работа
Close Закрывает открытый файл
CloseFile Закрывает открытый файл
Continue Заставляет перейти к следующей итерации цикла
Dec Декремент порядковой переменной
Delete Удаляет часть символов из строки
Dispose Очищает память на которую указывает указатель
EndThread Заканчивает поток с кодом завершения
Erase Стирает файл
Exclude Исключает значение из переменной набора (множества)
Exit Осуществляет выход из функции или процедуры
Frac Дробная часть числа с плавающей запятой
FillChar Заполняет раздел памяти значением байта или символа-заполнителя
Flush Сбрасывает буферизованные данные текстового файла в файл
GetDir Получает текущий каталог (диск плюс путь) для указанного диска.
Halt Заканчивает программу с дополнительным диалогом.
Inc Увеличивает порядковую переменную
Include Включает значение во множество переменных
Insert Вставляет строку в другую строку
MkDir Создаёт каталог
Move Копирует байты данных из источника в место назначения
New Создаёт новую переменную типа указатель
Randomize Устанавливает генератор случайного числа на следующее значение
Read Позволяет прочитать данные из двоичного или текстового файла
ReadLn Позволяет прочитать полную строку данных из текстового файла
ReallocMem Позволяет изменить размер существующего блока памяти
Reset Открывает текстовый файл для чтения, или двоичный файл для чтения/записи
ReWrite Открывает текстовый или двоичный файл для записи
RmDir Удаление каталога
Seek Перемещает указатель в двоичном файле в новую позицию
SetLength Изменяет размер строки или размер динамического массива
SetString Копирует символы из буфера в строку
Str Конвертирует целое число или число с плавающей точкой в строку
Truncate Уменьшает размер файла — удаляя все данные после текущей позиции
WriteLn Записывает законченную строку данных в текстовый файл
Функции, процедуры файлового ввода и вывода в Дельфи
Append (Var F:Text) – открывает текстовый файл, связанный с переменной F, для добавления его в конец.
CloseFile (var F) – закрывает открытый файл, связанный с файловой переменной F.
AssignFile (var F; FileName: String) – связывает имя внешнего файла FileName с файловой переменной F.
BlockRead / BlockWrite (var F:file; var Buf; Count: Integer[; var Result: Integer]) – читает Count записей из нетипизированного файла, связанного с файловой переменной F, в буфер Buf. Если задан параметр Result, то в него возврашается число действительно прочитанных записей. BlockWrite соответственно записывает Count записей из буфера Buf в файл.
Eof (var F):Boolean – возвращает true при достижении конца файла.
Eoln (var F:Text):Boolean – возвращает признак конца строки в текстовом файле.
Eraise (var F) – удаление внешнего файла связанного с переменной F.
FileSize (var F):Integer – текущий размер файла, связанного с переменной F. Не используется для текстовых файлов.
Flush (var F:Text) – очистка буфера выходного текстового файла, связанного с переменной F.
FilePos (var F): LongInt – возвращает текущую позицию типизированного или нетипизированного файла, связанного с переменной F. Позиция, соответствующая началу файла – 0.
IOResult: Integer – возвращает целое значение, характеризующее выполнение последней операции ввода или вывода.
Read (F, ) – читает из файла, связанного с переменной F, одно или более значений в одну или более переменную.
ReadLn (F, ) – читает одно или более значений в одну или более переменную и переходит на начало новой строки текстового файла.
Rename (var F: File; NewName:String) – переименование файла. В NewName указан полный путь к переименованному файлу.
Reset (var F[: File; RecSize: Word]) – открывает существующий файл связанный с файловой переменной F. RecSize задается для нетипизированных файлов и устанавливает длину записи в байтах (по умолчанию 128).
ReWrite (var F[: File; RecSize: Word]) – создает и открывает новый файл, связанный с файловой переменной F. RecSize задается для нетипизированных файлов и устанавливает длину записи в байтах (по умолчанию 128).
Seek (var F; N:LongInt) – перемещает текущую позицию в позицию N. Для текстовых файлов не используется.
SeekEof (var F:Text): Boolean – возвращает true при достижении конца текстового файла, связанного с файловой переменной F.
SeekEoln (var F:Text): Boolean – возвращает true при достижении конца строки текстового файла, связанного с файловой переменной F.
Truncate (var F) – усекает типизированный или нетипизированный файл, связанный файловой переменной F, на текущей позиции.
Write (var F; ) – записывает значение(я) в файл, связанный файловой переменной F.
WriteLn (var F; ) – записывает значение(я) в файл, затем заносит маркер конца строки в текстовый файл, связанный файловой переменной F.
. Программирование файлового ввода Delphi функции файлового ввод вывод в с++
Eoln — Функция Delphi
Теперь рассмотрим две самые распространенные операции, выполняемые при работе с файлами. Это чтение и запись. Для их осуществления применяются специальные функции файлового ввода/вывода.
Итак, для выполнения операции чтения или записи необходимо произвести следующие действия:
1. Объявить файловую переменную необходимого типа.
2. При помощи функции AssignFile связать эту переменную с требуемым файлом.
3. Открыть файл при помощи функций Append, Reset, Rewrite.
4. Выполнить операции чтения или записи. При этом, в зависимости от сложности задачи и структуры данных, может использоваться целый ряд вспомогательных функций.
5. Закрыть файл при помощи функции CloseFile .
По сравнению с Turbo Pascal изменились названия только двух функций: Assign стала AssignFile , a Close превратилась в CloseFile .
В качестве примера рассмотрим небольшой фрагмент исходного кода.
then AssignFiie(F, OpenDlg.FileName)
else Exit; Reset(F);
while Not EOF(F) do
Если в диалоге открытия файла OpenDlg был выбран файл, то его имя связывается с файловой переменной F при помощи процедуры AssignFiie . В качестве имени файла рекомендуется всегда передавать полное имя файла (включая его маршрут). Как раз в таком виде возвращают результат выбора файла диалоги работы с файлами TOpenDialog, TOpenPictureDiaiog . Затем при помощи процедуры Reset этот файл открывается для чтения и записи.
В цикле выполняется чтение из файла текстовых строк и запись их в компонент TMemo . Процедура Readin осуществляет чтение текущей строки файла и переходит на следующую строку. Цикл выполняется, пока функция EOF не сообщит о достижении конца файла.
После завершения чтения файл закрывается.
Такой же исходный код можно использовать и для записи данных в файл. Необходимо только заменить процедуру чтения на процедуру записи.
Теперь остановимся подробнее на назначении используемых для файлового ввода/вывода функций.
Открытие файла может осуществляться тремя процедурами — в зависимости от типа его дальнейшего использования.
procedure Reset(var F: File [; RecSize: Word ]);
открывает существующий файл для чтения и записи, текущая позиция устанавливается на первой строке файла.
открывает файл для записи информации после его последней строки, текущая позиция устанавливается на конец файла.
procedure Rewrite(var F: File [; RecSize: Word ]);
создает новый файл и открывает его, текущая позиция устанавливается в начало файла. Если файл с таким именем уже существует, то он перезаписывается.
Переменная RecSize используется только при работе с нетипизированными файлами и определяет размер одной записи для операции передачи данных. Если этот параметр опущен, то по умолчанию RecSize равно 128 байт.
Чтение данных из типизированных и текстовых файлов выполняют процедуры Read И Readin.
Процедура Read имеет различное объявление для текстовых и других типизированных файлов:
- procedure Read([var F: Text;] VI [, V2. Vn]);
- procedure Read(F, VI [, V2. Vn]);
для других типизированных файлов.
При одном вызове процедуры можно читать данные в произвольное число переменных. Естественно, что тип переменных должен совпадать с типом файла. При чтении в очередную переменную читается ровно столько байтов из файла, сколько занимает тип данных. В следующую переменную читается столько же байтов, расположенных следом. После выполнения процедуры текущая позиция устанавливается на первом непрочитанном байте. Аналогично работают несколько процедур Read для одной переменной, выполненных подряд.
procedure Readln([ var F: Text; ] VI [, V2. Vn ]);
считывает одну строку текстового файла и устанавливает текущую позицию на следующей строке. Если использовать процедуру без переменных vi. .vn, то она просто передвигает текущую позицию на очередную строку файла.
Процедуры для записи в файл write и writein описаны аналогично:
procedure Write([var F: Text; ] PI [, P2. Pn]) ; procedure Writein([ var F: Text; ] PI [, P2. Pn ]);
Параметры P1, P2, . Pn могут быть одним из целых или вещественных типов, одним из строковых типов или логическим типом. Но у них есть возможность дополнительного форматирования при выводе. Каждый параметр записи может иметь форму:
Р n — выводимая переменная или выражение;
MinWidth — минимальная ширина поля в символах, которая должна быть больше 0;
DecPlaces — содержит количество десятичных символов после запятой при отображении вещественных чисел с фиксированной точкой.
Обратите внимание, что для текстовых файлов в функциях Read и write файловая переменная F может быть опущена. В этом случае чтение и запись осуществляются в стандартные файлы ввода/вывода. Когда программа компилируется как консольное приложение (флаг <$APPTYPE CONSOLE>), Delphi автоматически связывает входной и выходной файлы с окном консоли.
Для контроля за текущей позицией в файле применяются две основные функции. Функция EOF (F) возвращает значение True , если достигнут конец файла. Функция EOLN(F) аналогично сигнализирует о достижении конца строки. Естественно, в качестве параметра в функции необходимо передавать файловую переменную.
обеспечивает смещение текущей позиции на N элементов. Размер одного элемента в байтах зависит от типа данных файла (от типизированной переменной).
Рассмотрим теперь режим блочного ввода/вывода данных между файлом и областью адресного пространства (буфером). Этот режим отличается значительной скоростью передачи данных, причем скорость пропорциональна размеру одного передаваемого блока — чем больше блок, тем больше скорость.
Для реализации этого режима необходимо использовать только нетипизированные файловые переменные. Размер блока определяется в процедуре открытия файла ( Reset, Rewrite ). Непосредственно для выполнения операций используются процедуры BlockRead и BlockWrite .
procedure BlockRead(var F: File; var Buf; Count: Integer
[; var AmtTransferred: Integer]);
выполняет запись блока из файла в буфер. Параметр F ссылается на нетипизированную файловую переменную, связанную с нужным файлом.
Параметр Buf определяет любую переменную (число, строку, массив, структуру), в которую читаются байты из файла. Параметр Count содержит число считываемых блоков. Наконец, необязательный параметр AmtTransferred возвращает число реально считанных блоков.
При использовании блочного чтения или записи размер блока необходимо выбирать таким образом, чтобы он был кратен размеру одного значения того типа, который хранится в файле. Например, если в файле хранятся значения типа Double (8 байт), то размер блока может быть равен 8, 16, 24, 32 и т. д. Фрагмент исходного кода блочного чтения при этом выглядит следующим образом:
DoubleArray: array [0..255] of Double;
if OpenDlg.Execute then AssignFile(F, OpenDlg.FileName) else Exit;
BlockRead(F, DoubleArray, 32, Transferee!);
ShowMessage(‘Считано ‘+IntToStr(Transfered)+’ блоков’);
Как видно из примера, размер блока установлен в процедуре Reset и кратен размеру элемента массива DoubleArray , в который считываются данные. В переменной Transfered возвращается число считанных блоков. Если размер файла меньше заданного в процедуре BlockRead числа блоков, ошибка не возникает, а в переменной Transfered передается число реально считанных блоков.
procedure BlockWrite(var f: File; var Buf; Count: Integer
[; var AmtTransferred: Integer]);
Оставшиеся функции ввода/вывода, работающие с файловыми переменными, подробно описаны в табл. 9.1.
Таблица 9.1. Процедуры и функции для работы с файлом
function ChangeFileExt (const FileName, Extension: string): string;
Функция позволяет изменить расширение файла. При этом сам файл не переименовывается
procedure ChDir(S: string);
Процедура изменяет текущий каталог на другой, путь к которому описан в строке s
procedure CloseFile (var F) ;
Вызов процедуры разрывает связь между файловой переменной и файлом на диске.
Имя этой процедуры изменено из-за конфликта имен в Delphi (в Borland Pascal используется процедура Close )
function DeleteFile (const FileName: string): Boolean;
Функция производит удаление файла FileName с диска и возвращает значение False , если файл удалить не удалось или файл не существует
function ExtractFileExt (const FileName: string): string;
Функция возвращает расширение файла
function ExtractFileName (const FileName: string) : string;
Извлекает имя и расширение файла, содержащегося в параметре FileName
function ExtractFilePath( const FileName: string): string;
Функция возвращает полный путь к файлу
procedure Erase (var F);
Удаляет файл, связанный с файловой переменной F
function FileSearch (const Name, DirList: string) : string;
Данная процедура производит поиск в каталогах DirList файла Name . Если в процессе выполнения FileSearch обнаруживается искомое имя файла, то функция возвращает в строке типа string полный путь к найденному файлу. Если файл не найден, то возвращается пустая строка
function FileSetAttr (const FileName: string; Attr: Integer): Integer;
Присваивает файлу с именем FileName атрибуты Attr. Функция возвращает 0, если присвоение атрибутов прошло успешно. В противном случае возвращается код ошибки
function FilePos (var F): Longint;
Возвращает текущую позицию файла. Функция используется для нетекстовых файлов. Перед вызовом FilePos файл должен быть открыт
function FileSize (var F): Integer;
FileSize возвращает размер файла в байтах или количество записей в файле, содержащем записи. Перед вызовом данной функции файл должен быть открыт.
Для текстовых файлов функция FileSize не используется
procedure Flush (var F: Text);
Процедура очищает буфер текстового файла, открытого для записи. F— файловая переменная.
Когда текстовый файл открыт для записи с использованием функции Rewrite или Append, Flush очищает выходной буфер, связанный с файлом. После выполнения данной процедуры все символы, которые направлены для записи в файл, будут гарантированно записаны в нем
procedure GetDir(D: Byte; var S: string);
Возвращает число, соответствующее диску, на котором содержится текущий каталог s. о может принимать одно из следующих значений:
0 — по умолчанию (текущий);
Процедура не генерирует код ошибки. Если имя диска в D оказывается ошибочным, то в строке S возвращается значение Х:\, как если бы текущая папка была на этом ошибочно указанном диске
function lOResult: Integer;
Функция возвращает статус последней произведенной операции ввода/вывода, если контроль ошибок выключен
procedure MkDir(S: string);
Процедура создает новый каталог, который описывается в строке S
procedure Rename (var F; NewName: string) ;
Процедура изменяет имя файла, связанного с файловой переменной F. Переменная NewName является строкой типа string или PChar (если включена поддержка расширенного синтаксиса)
procedure RmDir(S: string);
Процедура удаляет пустой каталог, путь к которому задается в строке S. Если указанный каталог не существует или он не пустой, то возникает сообщение об ошибке ввода/вывода
procedure Seek (var F; N: Longint) ;
Перемещает текущую позицию курсора на N позиций. Данная процедура используется только для открытых типизированных или нетипизированных файлов для проведения чтения/записи с нужной позиции файла. Началу файла соответствует нулевой номер позиции. Для добавления новой информации в конец существующего файла необходимо установить указатель на символ, следующий за последним. Для этого можно использовать выражение Seek (F, FileSize(F))
function SeekEof[(var F: Text) ] : Boolean;
Возвращает значение True , если указатель текущей позиции находится на символе конца файла. SeekEof может быть использован только с открытым текстовым файлом
function SeekEoln[ (var F: Text) ] : Boolean;
Возвращает значение True , если указатель текущей позиции находится на символе конца строки.
SeekEoln может быть использован только с открытым текстовым файлом
procedure SetTextBuf (var F: Text; var Buf [; Size: Integer] );
Связывает с текстовым файлом буфер ввода/вывода. F — файловая переменная текстового типа. Каждая файловая переменная текстового типа имеет внутренний буфер емкостью 128 байт, в котором накапливаются данные при чтении и записи. Такой буфер пригоден для большинства операций. Однако при выполнении программ с интенсивным вводом/выводом буфер может переполниться, что приведет к записи операций ввода/вывода на диск и, как следствие, к существенному замедлению работы приложения. SetTextBuf позволяет помещать в текстовый файл F информацию об операциях ввода/вывода вместо ее размещения в буфере. Size указывает размер буфера в байтах. Если этот параметр опускается, то полагается размер, равный SizeOf (Buf). Новый буфер действует до тех пор, пока F не будет связана с новым файлом процедурой AssignFile
Удаляет все позиции, следующие после текущей позиции в файле. А текущая позиция становится концом файла. С переменной F может быть связан файл любого типа за исключением текстового
НОВОСТИ ФОРУМА Рыцари теории эфира |
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Youtube]69vJGqDENq4[/Youtube][/center] [center]14:36[/center] Osievskii Global News 29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров. 30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Ok]376309070[/Ok][/center] [center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров. 30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education -> [center][Youtube]VVQv1EzDTtY[/Youtube][/center] [center]10:43[/center] |
интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/
[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.
[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]
Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html
Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html
[center][b]Сон разума народа России [/center]
[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]
Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html
Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html
[center][b]Сон разума народа России [/center]
Функции Delphi
Стандартные функции Delphi:
Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.
Между значением и именем функции существует зависимость. Поэтому всякая функция может быть представлена как операнд некоторого выражения (к примеру, в инструкции присваивания). Для возведения числа в n-ую степень достаточно записать
откуда ln — функция, вычисляющая натуральный логарифм числа exp(x), exp — функция, вычисляющая экспоненту в степени x, x — число, n-ую степень которого надо найти, а n — степень числа x. Каждая функция обладает следующими характеристиками: тип значений, тип параметров.
Должно существовать соответствие между типом переменной (ей присваивается определенное значение функции) и типом функции. И в то же время необходимо соответствие между типом фактического параметра данной функции (фактический параметр — это параметр, который указывается при обращении к функции) и типом формального параметра. В противном случае компилятором выводится сообщение об ошибке.
Математические функции Delphi:
Библиотеки языка Delphi включаются в себя и множество математических функций:
Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:
где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:
Функции преобразования Delphi:
Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.
Пример.
В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:
Применение функций Delphi:
В любом выражении функция используется как операнд. В качестве ее параметра можно выбрать переменную, константу, выражение определенного типа данных.
Примеры.
Структура функции Delphi
Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.
В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.
Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.
Eoln — Функция Delphi
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
|
Регистрация
Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru
|