TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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

             Приведем пример исходного кода,  показывающий, как можно ис-
        пользовать некоторые функции обработки строк. Этот пример исполь-
        зован при разработке функции 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;

         B.Pascal 7 & Objects/LR     - 307 -

                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;

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz