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

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

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

 
 Ответить  Открыть новую тему 
> Запуск программы с параметрами, (выбор каталога, куда будет смотреть прога)
-Scorpion-
сообщение 8.07.2007 21:02
Сообщение #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. Комментарии по процедуре подсчёта контрольной суммы, также внимательно выслушаю.
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2007 21:27
Сообщение #2


Гость






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

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

?

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

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

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

 



- Текстовая версия 20.07.2025 18:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"