14.1. Работа с командной строкой. Функции ParamCount и ParamStr
Функции ParamCount и ParamStr необходимы для работы самостоятельных программ (ЕХЕ-файлов) с параметрами командной строки. Под последними понимается набор параметров, разделенных пробелами (реже знаками табуляции), который стоит после имени запускаемого файла в строке MS-DOS, например:
C:> format a: /S
Сам по себе параметр может содержать все что угодно, кроме пробелов и табуляций. Правда, можно видеть, что некоторые утилиты требуют разделять параметры знаками типа «/» или «-». Они не являются разделителями по правилам MS-DOS, и программа сама должна разбираться, сколько параметров заложено в конструкциях типа /a/c/e/z/x или -a-g-c.
Если после имени файла в командной строке MS-DOS пусто, то ParamCount возвращает значение 0, в противном случае — число параметров в строке, разделенных пробелами или табуляцией. Это можно использовать для остановки программ, которым при запуске не были переданы параметры-аргументы (рис. 14.1).
- 296 -
| PROGRAM Uses_Parameters; { программа MyProg.pas }
| ...
| BEGIN { начало основного блока }
| if ParamCount=0 then
| begin { параметры отсутствуют }
| WriteLn;
| Write ( 'Запуск программы: '#10 );
| WriteLn( 'MyProg Параметр1 [ Параметр2 ]' );
| WriteLn; Halt
| end;
| { . . . выполнение программы . . . }
| END.
Рис. 14.1
После того как определено количество параметров, можно выбрать любой из них, используя функцию ParamStr( N ), возвращающую в виде строки параметр номер N. Пусть запуск программы имеет вид
В этом примере ParamCount вернула бы значение 4, a ParamStr имела бы такие значения типа String:
| N -- ParamStr(N)
| 0 -- 'C:TURBOPASMYPROG.EXE'
| 1 -- 'abc'
| 2 -- 'z'
| 3 -- '/c/d'
| 4 -- '123'
| 5 и более -- ' '
Отметим два момента: во-первых, имеет смысл (всегда!) вызов ParamStr (0), возвращающий полное имя запущенной программы; во-вторых, цифры в строке параметров будут трактоваться как строка, а не как число, и их надо будет преобразовывать процедурой Val.
- 297 -
При запуске из среды программирования ParamStr(0) вернет полное имя файла TURBO.EXE (с указанием пути к нему).
Чтобы обеспечить удобство пользования и «дружелюбность» программы, надо делать так, чтобы при отсутствии параметров при запуске программа начинала спрашивать их с экрана. Это легко сделать с помощью рассмотренных функций. Пусть, например, программа запрашивает имя файла данных, и если пользователь не вводит его, принимает некое значение имени по умолчанию. Тогда алгоритм может выглядеть так, как показано на рис 14.2.
| { Пример программы, принимающей имя файла }
| VAR
| s : String;
| BEGIN { начало основного блока }
| if ParamCount>0 { есть ли параметры? }
| then s:=ParamStr(1) {да }
| else begin {нет }
| Write( 'Введите имя файла [DEFAULT.DAT] ' );
| ReadLn( s );
| if s=' ' then s:='DEFAULT.DAT'
| end;
| { ... ВЫПОЛНЕНИЕ ПРОГРАММЫ — обработка файла s ... }
| END.
Рис. 14.2
При отладке программ в среде Турбо Паскаль, где нет командной строки MS-DOS, можно передать программе параметры через команду Parameters в меню системных команд Options.