Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Запуск программы с параметрами

Автор: -Scorpion- 9.07.2007 1:02

Сделал программку, которая залезает в заданный каталог и считает контрольную сумму находящихся там файлов.
Надо, чтобы имя каталога можно было задавать во время выполнения программы. Т.е. в нортон коммандоре набрав что-то типа

Код
sum test1

программа работала внутри C:/Test1, соответственно при "sum test2", внутри C:/Test2

Код программы :
program sum;
{$R-} { kill checking on error 201}
{$o-} { in theory kills overlay or maybe error 215 - arifmetic overflow}
uses Dos,Printer,OPString,Graph,CRT;
var
S : SearchRec;
dir_name:string;
control_sum : longint;{with longint works, originally it was "word"}
all_sum : longint;
read_sumb : word;
f:file of char;
{i:integer;}{dublirovanie peremennoi, - maybe in future need to uncomment}
ch : char;

{/////////////////////////////////////////////}
procedure calc_control_sum;
var
i : integer;
ch : char;
begin
assign(f,dir_name+S.name);
reset(f);
control_sum := 0;
while not EOF(f) do
begin
for i :=0 to 2 do
begin
if EOF(f) = true then break;
read(f,ch);
read_sumb := (read_sumb + longint(ch)) shl 8; {shl-left sdvig}
end;
if EOF(f) = true then break;
read(f,ch);
read_sumb := read_sumb + longint(ch);
{$Q-}
control_sum := (control_sum + read_sumb);
{$Q+}
if (control_sum and $80000000) <> $0 then
i := 1
else i := 0;
control_sum := (control_sum shl 1) + longint(i);
end;
writeln(HexL(control_sum));
{$Q-}
all_sum:=all_sum+control_sum;
{$Q+}
close(f);
end;

procedure look_into_rmo;
begin
writeln('C:\Fregat\');
writeln('_________________________');
dir_name:='C:\fregat\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=0 do
begin
with S do
write('KC '+Name+' = ');
calc_control_sum;
FindNext(S);
end;
writeln('___________________________');
writeln('');
end;

procedure look_into_decod;
begin
writeln('C:\Fregat\decod');
writeln('___________________________');
dir_name:='C:\fregat\decod\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=0 do
begin
with S do
write('KC '+Name+' = ');
calc_control_sum;
FindNext(S);
end;
writeln('___________________________');
writeln('');
end;

procedure look_into_mod;
begin
writeln('C:\Fregat\mod');
writeln('___________________________');
dir_name:='C:\fregat\mod\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=0 do
begin
with S do
write('KC '+Name+' = ');
calc_control_sum;
FindNext(S);
end;
writeln('___________________________');
writeln('');
end;

procedure look_into_tbl;
begin
writeln('C:\Fregat\tbl');
writeln('___________________________');
dir_name:='C:\fregat\tbl\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=0 do
begin
with S do
write('KC '+Name+' = ');
calc_control_sum;
FindNext(S);
end;
writeln('___________________________');
writeln('');
end;
{
////////////////////////////////////////////
///// Main Program /////
////////////////////////////////////////////
}
var
test:char;
catalog:boolean;
begin
all_sum:=0;

catalog:=true;
dir_name:='C:\fregat\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=3 do
begin
catalog:=false;
writeln('Љ в «®Ј C:\Fregat ­Ґ бгйҐбвўгҐв.');
break;
end;
while DosError=0 do look_into_rmo;
{
dir_name:='C:\fregat\decod\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=3 do break;
while DosError=0 do look_into_decod;

dir_name:='C:\fregat\mod\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=3 do break;
while DosError=0 do look_into_mod;

dir_name:='C:\fregat\tbl\';
FindFirst(dir_name+'*.*' ,SysFile,S);
while DosError=3 do break;
while DosError=0 do look_into_tbl;
}
if catalog=true then
begin
writeln('Љ‘ ўбҐе д ©«®ў = '+HexL(all_sum));
readln(test);
end else
readln(test);
end.



P.S. Комментарии по процедуре подсчёта контрольной суммы, также внимательно выслушаю.

Автор: volvo 9.07.2007 1:27

Что-то вроде:

...
dir_name:='C:\' + ParamStr(1) + '\';
...

?

Ну, естественно, для начала проверить, что ParamCount не меньше чем 1 ... (Turbo Pascal Help по словам ParamStr/ParamCount выдаст пример использования)

P.S. Чтобы отлаживать программу в IDE можешь в меню Run -> Parameters ввести параметры (без имени EXE-файла), которые будешь передавать программе из командной строки...