Автор: Пользователь скрыл имя, 06 Февраля 2013 в 01:52, аттестационная работа
Класс TList -- универсальный список. Он представляет собой массив нетипированных указателей и поэтому годится для хранения набора любых, в том числе разнотипных, данных и объектов. При добавлении/удалении в список данные не создаются и не уничтожаются -- эта обязанность лежит на программисте. Приведем доступные ему методы и свойства класса.
function StrToIntDef(const S: string; Default; Longint): Longint ; |
Работает как StrToInt, но при ошибке возвращает значение Default. |
function LoadStr(Ident: Word) : string; |
Загружает строку с индексом Ident из ресурсов приложения. |
function FmtLoadStr(Ident: Word; const Args: array of const): string; |
Загружает строку с индексом Ident из ресурсов приложения с форматированием (см. описание функции Format). |
Следующая таблица содержит функции для работы со строками типа PChar (также находятся в модуле SYSUTILS):
function StrLIComp(Strl, Str2: PChar; MaxLen: Cardinal) : Integer; |
Работает как StrLComp, но без учета регистра символов. |
function StrScantStr: PChar; Chr: Char) : PChar; |
Отыскивает первое вхождение символа Chr в строку Str и возвращает указатель на него или nil в случае отстутствия. |
function StrRScanfStr: PChar; Chr: Char) : PChar; |
Работает как StrScan, но отыскивается последнее вхождение Chr. |
function StrPos(Strl, Str2: PChar) : PChar; |
Отыскивает первое вхождение строки Str2 в строку Strl и возвращает указатель на нее или nil в случае отстутствия. |
function StrUpperfStr: PChar) : PChar; |
Преобразует строку к верхнему регистру. |
function StrLower(Str: PChar): PChar; |
Преобразует строку к нижнему регистру. |
function StrPaslStr: PChar): String; |
Преобразует строку Str в строку типа string. |
function StrAlloc(Size: Cardinal): PChar; |
Размещает в куче памяти новую строку размером Size и возвращает указатель на нее. |
function StrBufSize(Str: PChar): Cardinal; |
Возвращает размер блока памяти, выделенного для строки при помощи функции StrAlloc. |
function StrNewfStr: PChar): PChar ; |
Размещает в куче памяти копню строки Str и возвращает указатель на нее. |
procedure StrDispose(Str: PChar); |
Уничтожает строку, размещенную при помощи StrAlloc или StrNew. |
function StrLenfStr: PChar): |
Возвращает число символов в строке Str (без учета завершающего нулевого). |
function StrEndfStr: PChar): PChar; |
Возвращает указатель на завершающий нулевой символ строки Str. |
function StrMove(Dest, Source: PChar; Count: Cardinal): PChar; |
Копирует из строки Source в строку Dest ровно Count символов, причем строки могут перекрываться. |
function StrCopy(Dest, Source: PChar): PChar; |
Копирует Source в Dest и возвращает указатель на Dest. |
function StrECopy(Dest, Source: PChar): PChar; |
Копирует Source в Dest и возвращает указатель на завершающий символ Dest. |
function StrLCopy(Dest, Source: PChar; MaxLen: Cardinal): PChar; |
Работает как StrCopy, но копирует не более MaxLen символов. |
function StrPCopy(Dest: PChar; const Source: String): PChar; |
Копирует строку Source (типа string) в Dest и возвращает указатель на Dest. |
function StrPLCopy(Dest: PChar; const Source: string; MaxLen: Cardinal): PChar; |
Работает как StrPCopy, но копирует не более MaxLen символов. |
function StrCat(Dest, Source: PChar): PChar; |
Дописывает Source к концу Dest и возвращает указатель на Dest. |
function StrLCatfDest, Source: PChar; MaxLen: Cardinal) : PChar; |
Работает как StrCat, но копирует не более MaxLen-StrLen(Dest) символов. |
function StrCoirip(Strl, Str2: PChar): Integer; |
Сравнивает две строки (посимвольно). Возвращает значение: <0 -- при Strl <Str2, 0 -- при Strl =Str2, >0 -- при Strl >Str2. |
function StrIComp(Strl, Str2: PChar): Integer; |
Работает как StrComp, но без учета регистра символов. |
function StrLComp(Strl, Str2: PChar; MaxLen: Cardinal): Integer; |
Работает как StrComp, но сравнение происходит на протяжении не более чем MaxLen символов. |
Функции работы с файлами
Эта часть библиотеки претерпела изменения в Delphi. К функциям, которые работали с файлом через файловую переменную, добавились функции, работающие с дескриптором файла. Они рассматривают файл как двоичный; с текстовыми файлами нужно работать "по старинке".
Файловые функции, описанные в модуле SYSUTILS, приведены в таблице:
function File0pen(const FileName: string; Mode: Word) : Integer; |
Открывает существующий FileName файл в режиме Mode (см. примеч. 1). Значение, возвращаемое в случае успеха, -- дескриптор открытого файла. В противном случае -- код ошибки DOS. |
function FileCreate(const PileName: string): Integer; |
Создает файл с именем FileName. Возвращает то же, что и FileOpen. |
function FileRead(Handle: Integer; var Buffer; Count: Longint): Longint; |
Считывает из файла с дескриптором Handle Count байт в буфер Buffer. Возвращает число реально прочитанных байт или -1 при ошибке. |
function FileWrite(Handle: Integer; const Buffer; |
Записывает в файл с дескриптором Handle Count байт из буфера Buffer. Возвращает число реально записанных байт или -1 при ошибке. |
function FileSeek(Handle: Integer; Offset: Longint; Origin: Integer): Longint; |
Позиционирует файл с дескриптором Handle в новое положение. При Origin = 1,2,3 положение смещается на Offset байт от начала файла, текущей позиции и конца файла соответственно. Возвращает новое положение или -1 при ошибке. |
procedure FileClose(Handle: |
Закрывает файл с дескриптором Handle. |
function FileAge(const |
Возвращает значения даты и времени создания файла или -1, если файл не существует. |
function FileExists(const |
Возвращает True если файл FileName существует к найден. |
function FindFirst(const Path: string; Attr: Integer; var SearchRec: TSearchRec): Integer; |
Ищет первый файл, удовлетворяющий маске поиска, заданной в Path и с атрибутами Attr (см. примеч. 2). В случае успеха заполняет запись SearchRec (см. примеч. 3) и возвращает 0, иначе возвращает код ошибки DOS. |
function FindNext(var SearchRec: TSearchRec): Integer; |
Продолжает процесс поиска файлов, удовлетворяющих маске поиска. Параметр SearchRec должен быть заполнен при помощи FindFirst. Возвращает 0, если очередной файл найден, или код ошибки DOS. Изменяет SearchRec. |
procedure FindClose(var |
Завершает процесс поиска файлов, удовлетворяющих маске поиска. |
function FileQetDate(Handle: Integer) : Longint; |
Возвращает время создания файла с дескриптором Handle (в формате DOS) или -1, если дескриптор недействителен. |
procedure FileSetDate(Handle: Integer; |
Устанавливает время создания файла с дескриптором Handle (в формате DOS). |
function FileGetAttr(const FileName: string): Integer; |
Возвращает атрибуты (см. примеч. 2) файла с именем FileName или код ошибки DOS, если файл не найден. |
function FileSetAttrtconst FileName: string; Attr: |
Устанавливает атрибуты файла с именем FileName. |
function DeleteFile(const |
Уничтожает файл с именем FileName и в случае успеха возвращает True. |
function RenameFile(const OldName, NewName: string): Boolean; |
Переименовывает файл с именем OldName в NewName и возвращает True в случае успеха. |
|
|
function ChangeFileExt(const FileName, Extension: string): string; |
Изменяет расширение в имени файла FileName на Extension и возвращает новое значение FileName. Имя файла не изменяется. |
function ExtractFilePath(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую путь к нему. |
function ExtractFileName(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую его имя и расширение. |
function ExtractFileExt(const FileName: string): string; |
Извлекает из строки с полным именем файла FileName часть, содержащую его расширение. |
function ExpandFileName(const FileName: string): string; |
Возвращает полное имя файла FileName, добавляя при необходимости путь к нему и переводя все символы в верхний регистр. |
function FileSearch(const Name, DirList: string): strings- |
Производит поиск файла с именем Name в группе каталогов, заданных параметром DirList. Имена каталогов должны отделяться друг от друга точкой с запятой. Возвращает в случае успеха полное имя файла или пустую строку, если файл не найден. |
function DiskFree(Drive: Byte): Longint; |
Возвращает количество в байтах свободного места на заданном диске. Значение параметра Drive: 0 -- для текущего диска, 1 -- для А, 2 -- для В и т. д. Если параметр неверен, функция возвращает -1. |
function DiskSize(Drive: Byte): Longint; |
Возвращает размер диска Drive в байтах. Параметр Drive означает то же, что и в DiskFree. |
function FileDateToDateTime(FileDate: Longint): TDateTime; |
Преобразует дату и время в формате DOS в принятый в Delphi формат TDateTime. |
function DateTimeToFileDate(DateTime: TDateTime): Longint; |
Преобразует дату и время из формата TDateTime в формат DOS. |
Примечания:
1. Допустимы следующие режимы открытия файлов:
|
|
* |
Режим |
Значение |
Что означает |
fmOpenRead |
$0000 |
Открыть только для чтения. |
fmOpenWrite |
$0001 |
Открыть только для записи. |
fmOpenReadWrite |
$0002 |
Открыть для чтения и записи. |
fmShareCompat |
$0000 |
Обеспечить совместимость со старой моделью доступа к файлам. |
Режим |
Значение |
Что означает |
fmShareExclusive |
$0010 |
Запретить другим доступ к файлу. |
fmShareDenyWrite |
$0020 |
Запретить другим запись в файл. |
fmShareDenyRead |
$0030 |
Запретить другим чтение файла. |
fmShareDenyNone |
$0040 |
Разрешить другим все виды доступа. |
2. Файлы могут иметь следующие атрибуты:
faReadOnly = $01;
faHidden = $02;
faSysFile = $04;
faVolumeID = $08;
faDirectory = $10;
faArchive = $20;
faAnyFile = $3F;
3. Формат структуры TSearchRec таков:
TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12] ;
end;
Приведем типовой вариант организации групповой обработки файлов при помощи функций FindFirst, FindNext и FindClose. В нем в список добавляются имя и длина всех файлов в каталоге с именем CADELPHI:
var SearchRec: TSearchRec;
I : Integer;
List : TStringList;
begin
List := TStringList.Create;
I := FindFirst('c:\delphi\*.*', faAnyFile, SearchRec);
while I = 0 do begin
List.Add(Format (' File %s has length %d bytes ', [SearchRec.Name, SearchRec.Size])) ;
I := FindNext(SearchRec);
end;
FindClose(SearchRec) ;
List.Free;
end;
При поиске файла наиболее вероятным является код ошибки -18 (файл не найден).
Процедура FindClose не делает ничего в 16-разрядной версии Delphi, однако будет играть роль в 32-разрядной. Употреблять ее следует из соображений переносимости приложений.
4 Ряд "старых" функций переименованы: это связано с появлением одноименных методов у объектов. Теперь вместо Assign следует употреблять AssignFile, вместо Close -- CloseFile. Старые имена поддерживаются ддя совместимости, но могут вызвать проблемы при одновременном употреблении с именами методов.
2.14.3. Функции форматирования строк
Еще со времен языка FORTRAN у программистов появилась необходимость форматировать строки, направляемые на устройства вывода. Требовался легкий способ для того, чтобы не просто преобразовать число в строку, но также объединить эту строку с другими и включить ее в состав целого предложения.
В Delphi существует группа функций форматирования строк. Их рассмотрение начнем с наиболее часто встречающегося представителя -- функции Format:
function Format (const Format: string; const Args: array of const) : string;
Первым параметром функции выступает форматирующая строка. Это -- обычная текстовая строка, но в ней на нужных местах стоят специальные символы, которые определяют, какие и как туда будут подставлены параметры.
Второй параметр функции Format называется списком аргументов. Он и содержит "вставляемые" в форматирующую строку параметры. Обратите внимение, что этот открытый массив имеет тип array of const. и в нем может передаваться переменное число разнотипных параметров. Например, после выполнения
S := FormatC Product %s , version %d.%d', [ 'Borland Delphi' , 1, 0]);
строке S будет присвоено * Product Borland Delphi , version 1.0'. Рассмотрим подробнее правила, по которьм составляется форматирующая строка.
"Специальные" места в ней называются спецификаторами формата и представляют собой следующие конструкции
"%" [index":"] ["-"I [width] ["."prec] type
где обозначены:
* символ -%", с которого начинаются все спецификаторы формата (обязательный);
* поле индекса аргумента [ index " : " ] (необязательное);
* признак выравнивания по левому краю ["-"I (необязательный);
* поле ширины [width] (необязательное);
* поле точности [ - . - prec ] (необязательное);
* символ типа преобразования type (обязательный).
Каждый спецификатор формата соответствует как минимум одному из элементов списка аргументов и определяет, как именно рассматривать его и преобразовывать в строку.
Функция Format поддерживает следующие символы типа преобразования:
Символ |
Тип |
Что означает |
d |
Десятичный |
Элемент должен быть целым числом и преобразуется в строку десятичных цифр. Если при символе есть поле точности, то в выходной строке будет минимум ргес цифр; если при преобразовании числа их потребуется меньше, то строка дополняется слева нулями. |
х |
Шестнадцатиричный |
Как тип d, но элемент преобразуется в строку шестнадцатиричных цифр. |
е |
Научный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к нормализованному виду -d.dddE+ddd. Перед десятичной точкой всегда находится одна цифра (при необходимости, с минусом). После символа "Е" идет показатель степени, имеющий знак и состоящий не менее чем из 3 цифр. Общее число символов в представлении числа определяется полем ргес (по умолчанию 15). |
f |
Фиксированный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к виду -ddd.ddd. Поле ргес означает количество цифр после десятичной точки (по умолчанию 2). |
д |
Обобщенный |
Элемент должен быть числом с плавающей точкой. Он преобразуется к одному из двух вышеперечисленных видов -- выбирается тот, который обеспечивает более короткую запись. Если требуемое число цифр слева от десятичной точки меньше значения поля ширины и само число больше 10" , применяется фиксированный тип. Удаляются все впереди идущие нули, десятичная точка (при возможности), а также символы, разделяющие строку на группы по три цифры. |
п m |
Числовой Денежный |
Совпадает с типом f за исключением того, что после каждой группы из трех цифр ставятся разделительные символы: d,ddd, ddd.ddd.... Элемент должен быть числом с плавающей точкой, отражающей денежную сумму. Способ ее представления зависит от значений глобальных констант, определенных в модуле SYSUTILS (см. ниже). В свою очередь, они зависят от настройки Windows на обозначения, принятые в данной стране. |
Р |
Указатель |
Элемент должен быть указателем. На выходе он будет представлять из себя строку шестнадцатиричных цифр вида ХХХХ: YYYY, где ХХХХ -- селектор, YYYY -- смещение. |
s |
Строка |
Элемент может иметь тип string, PChar или быть отдельным символом (Char). Эта строка (или символ) вставляются вместо спецификатора формата. Если присутствует поле ргес и длина строки больше его значения, то она усекается. |