IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Запуск программы с параметрами, (выбор каталога, куда будет смотреть прога)
сообщение
Сообщение #1


Гость






Сделал программку, которая залезает в заданный каталог и считает контрольную сумму находящихся там файлов.
Надо, чтобы имя каталога можно было задавать во время выполнения программы. Т.е. в нортон коммандоре набрав что-то типа
Код
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. Комментарии по процедуре подсчёта контрольной суммы, также внимательно выслушаю.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

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

?

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

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 13:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name