Помощь - Поиск - Пользователи - Календарь
Полная версия: Запуск программы с параметрами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Scorpion-
Сделал программку, которая залезает в заданный каталог и считает контрольную сумму находящихся там файлов.
Надо, чтобы имя каталога можно было задавать во время выполнения программы. Т.е. в нортон коммандоре набрав что-то типа
Код
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('Љ в «(r)Ј 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('Љ‘ ўбҐе д (c)«(r)ў = '+HexL(all_sum));
  readln(test);
 end else
readln(test);
end.



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

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

?

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

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