Zamiana parametru programu na Char

0

witam
mam maly problem
pierwszy parametr z jakim zostal uruhcomiony program chce wczytac do Char a nastepnie sprawdzac czy ten Char zawarty jest w okreslonym przedziale
niestety program na starcie sie wywala
prosze o pomoc

metoda1

var P : Char;
begin

 P := Char(UpperCase(ParamStr(1)));

 if P in ['P', 'R', 'H', 'L', 'S', 'D']
  then jakastamfunkcja(P);

end;

metoda2

var P : Char;
begin

 P := UpperCase(ParamStr(1))[1];

 if P in ['P', 'R', 'H', 'L', 'S', 'D']
  then jakastamfunkcja(P);

end;

tak czy inaczej efektem koncowym powinien byc wczytany parametr do Chara w postaci duzej litery

0

metoda 1 odpada całkowicie, program nie powinien Ci się nawet kompilować, bo ParamStr to String nie Char, druga może być, ale zanim cokolwiek zrobisz sprawdź
np. If ParamCount<1 Then Exit;
przecież nie zawsze program musi być uruchamiany z parametrem ;)

Pozdrawiam.

0
skybit napisał(a)

druga może być, ale zanim cokolwiek zrobisz sprawdź
np. If ParamCount<1 Then Exit;
przecież nie zawsze program musi być uruchamiany z parametrem ;)

tak wiem ale mimo to mi wywala :(</quote>

0
greenmag napisał(a)
skybit napisał(a)

druga może być, ale zanim cokolwiek zrobisz sprawdź
np. If ParamCount<1 Then Exit;
przecież nie zawsze program musi być uruchamiany z parametrem ;)

tak wiem ale mimo to mi wywala :(
</quote>

A zrób:

P:=UpperCase(ParamStr(1)[1]);

Którą masz wersję Delphi?

0

Nie P:=UpperCase(ParamStr(1)[1]) tylko P:=UpCase(ParamStr(1)[1]); Działa. D5.

function UpCase(Ch: Char): Char;

function UpperCase(const S: string): string;

subtelna różnica ;)

Pozdrawiam.

0

i wcześniej wypadało by sprawdzić if Length(ParamStr(1)) > 0 then

0

w sumie zamiast robic If .. in... mozesz wyszukac literki w stringu:

If Pos(LowerCase(ParamStr(1)[1]), 'qwerty')>0 then...
0
skybit napisał(a)

function UpCase(Ch: Char): Char;
function UpperCase(const S: string): string;
o juz moj pierwszy blad

a drugim bylo ze robilem taki warunek

if (UpCase(ParamStr(1)[1]) in ['P', 'R', 'H', 'L', 'S', 'D']) and (ParamCount > 0) then showmessage('yup!');

a powinno byc tak

if (ParamCount > 0) and (UpCase(ParamStr(1)[1]) in ['P', 'R', 'H', 'L', 'S', 'D']) then showmessage('yup!');

niby wszystko to samo ale wywalalo

dzieki wszystkim za pomoc

0

:-) a jednak nie to samo, w konstrukcji If (war1 and war2 and war...) then przy pierwszym napotkanym warunku = False następne warunki nie są sprawdzane (bo i po co), zawsze rezultat będzie False, czyli ważne, co jest sprawdzane najpierw, a co potem :-)
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1