Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Пример использования функций с завершающим нулем

Приведем пример исходного кода, показывающий, как можно ис-

пользовать некоторые функции обработки строк. Этот пример исполь-

зован при разработке функции FileSplit в модуле WinDos.

{ максимальные размеры компонентов имени файла }

const

fsPathName = 79; { имя маршрута }

fsDirectory = 67; { имя каталога }

fsFileName = 8; { имя файла }

fsExtension = 4; { расширение имени файла }

{ флаги, возвращаемые FileSplit }

const

fcWildcards = $0008 { трафаретные символы }

fcDirectory = $0004 { имя каталога }

fcFileName = $0002 { имя файла }

fcExtension = $0001 { расширение имени файла }

{ FileSplit разбивает имя файла, заданное маршрутом, на три }

{ компонента. Dir принимает значение диска и каталога с }

{ предшествующей и завершающей обратной косой чертой, Name }

{ принимает значение имени файла, а Ext - расширения с }

{ предшествующей точкой. Если компонент строки-параметра }

{ равен NIL, то соответствующая часть маршрута не }

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

{ то возвращаемая строка компонента будет пустой. }

{ Максимальные длины строк, возвращаемых в Dir, Name и Ext, }

{ определяются битовыми масками fsDirectory, fsFileName, }

{ fsExtension. Возвращаемое значение представляет собой }

{ комбинацию битовых масок fсDirectory, fсFileName и }

{ fсExtension, показывающую, какие компоненты присутствуют в }

{ маршруте. Если имя и расширение содержат трафаретные }

{ символы (* и ?), то в возвращаемом значении устанавливается }

{ флаг fcWildcards. }

function FileSplit(Path, Dir, Name, Ext: PChar): Word;

var

DirLen, NameLEn, Flags: Word;

NamePtr, ExtPtr: PChar;

begin

NamePtr := StrRScan(Path, '/');

if NamePtr = nil then NamePtr := StrRScan(Path, ':');

if NamePtr = nil then NamePtr := Path else Inc(NamePtr);

ExtPtr := StrScan(NamePtr, '.');

if ExtPtr = nil then ExtPtr := StrEnd(NamePtr);

DirLen := NamePtr - Path;

if DirLen > fsDirectory then DirLen := fsDirectory;

NameLen := ExtPtr - NamePtr;

if NameLen > fsFilename then NameLen := fsFileName;

Flags := 0;

if (StrScan(NamePtr, '?') <> nil) or

(StrScan(NamePtr, '*') <> nil) then

Falgs := fcWildcards;

if DirLen <> 0 then Flags := Flags or fcDirectory;

if NameLen <> 0 then Flags := Flags or fcFilename;

if ExtPtr[0] <> #0 then Flags := Flags or fcExtension;

if Dir <> nil then StrLCopy(Dir, Path, DirLen);

if Name <> nil then StrLCopy(Name, NamePtr, NameLen);

if Ext <> nil then StrLCopy(Ext, ExtPtr, fsExtension);

FileSplit := Flags:

end;

Соседние файлы в предмете Программирование на Pascal