Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 170

| >Read( f, ... ); { и можно нормально работать с }

| >... { файлом f... }

| >Close(f)

| >end; {else и if}


Рис. 12.10

В случае неудачи при открытии файла к нему не надо применять процедуру закрытия Close.

По тому же принципу можно построить функцию анализа существования файла (рис. 12.11).


| >FUNCTION FileExists( FileName : String ) : Boolean;

| VAR

| >f : File; { тип файла не важен }

| BEGIN

| >Assign( f, FileName ); { связывание файла f }

| >{$I-} Reset( f ); {$I+} { открытие без контроля }

| >if IOResult=0 { Если файл существует, }

| >then begin { то его надо закрыть }

| >Close{ f );

| >FileExists := True end {then}

| >else { иначе просто дать знать}

| >FileExists := False;

| END;


Рис. 12.11


2. Выбор режима дозаписи в текстовый файл или его создания. Механизм остается тот же (рис. 12.12). Здесь f — текст-файловая переменная.

- 264 -


| >Assign(f,'XFile.TXT'); {связывание файла f }

| >{$I-} Append( f ); {$I+} {попытка открыть его для дозаписи}

| >if IOResult<>0 {Если файл не может быть открыт, }

| >then Rewrite( f ); {то создать его. }

| >...

| >Write( f, ...); { нормальная работа с файлом }

| >...

| >Close( f );


Рис. 12.12

3. Переход в заданный каталог или его создание, если переход возможен (рис. 12.13, S — строковая переменная).


| >S := 'C:\NEWDIR'; { задано имя каталога }

| >{$I-} ChDir( S ); {$I+} { попытка перейти в него }

| >if IOResult<>0 { Если не получается, }

| >then begin

| >MkDir( S ); {то сначала создать его, }

| >ChDir( S ) { а уж потом перейти. }

| >end; {if}

| >{ Подразумевается, что каталог S в принципе создаваем. }


Рис. 12.13

4. Построение «умных» ждущих процедур чтения данных с клавиатуры. Такие процедуры не будут реагировать на данные не своего формата (рис. 12.14).


| >{ Здесь используется ряд процедур из библиотеки }

| >CRT; { модуля CRT. Они отмечены * в комментариях. }

{Процедура считывает с клавиатуры значение типа Integer, помещая его в переменную V. При этом игнорируется любой ввод, не соответствующий этому типу. X и Y — координаты текста запроса Comment. Проверка корректности значений X и Y не производится. }

PROCEDURE ReadInteger( X,Y : Byte; Comment : String;

| >VAR V : Integer );


Рис. 12.14

- 265 -


| CONST

| >zone =12; { ширина окна зоны ввода числа }

| VAR

| >WN.WX : Word; {переменные для хранения размеров окна }

| BEGIN

| >WN:=WindMin; WX:=WindMax; {Сохранение текущего окна }

| >{$I-} { отключение режима проверки }

| >GotoXY( X,Y ); {*перевод курсора в X,Y }

| >Write( Comment ); { печать комментария ввода }

| >Inc(X, Length(Comment)); { увеличение координаты X }

| >Window( X,Y, X+zone,Y ); {*определение окна на экране }

|