Функции ParamCount и ParamStr необходимы для работы самостоятельных программ (ЕХЕ-файлов) с параметрами командной строки. Под последними понимается набор параметров, разделенных пробелами (реже знаками табуляции), который стоит после имени запускаемого файла в строке MS-DOS, например:
первый параметр
┌──┴──┐
C:\> format a: /S
└──┬──┘ └──┬──┘
имя выполняемого файла второй параметр
Сам по себе параметр может содержать все что угодно, кроме пробелов и табуляций. Правда, можно видеть, что некоторые утилиты требуют разделять параметры знаками типа «/» или «-». Они не являются разделителями по правилам MS-DOS, и программа сама должна разбираться, сколько параметров заложено в конструкциях типа /a/c/e/z/x или -a-g-c.
Если после имени файла в командной строке MS-DOS пусто, то ParamCount возвращает значение 0, в противном случае — число параметров в строке, разделенных пробелами или табуляцией. Это можно использовать для остановки программ, которым при запуске не были переданы параметры-аргументы (рис. 14.1). {295}
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. Пусть запуск программы имеет вид
имя программы
┌──┴──┐
C:\TURBO\PAS> Myprog abc /z /c/d 123
└────┬────┘ └────┬────┘
приглашение MS-DOS параметры
В этом примере ParamCount вернула бы значение 4, a ParamStr имела бы такие значения типа String:
N
ParamStr(N)
‘C:\TURBO\PAS\MYPROG.EXE’
‘abc’
‘z’
‘/c/d’
‘123’
5 и более
‘ ‘
Отметим два момента: во-первых, имеет смысл (всегда!) вызов ParamStr (0), возвращающий полное имя запущенной программы; во-вторых, цифры в строке параметров будут трактоваться как строка, а не как число, и их надо будет преобразовывать процедурой Val. {296}
При запуске из среды программирования 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.