这个函数主要实现如下功能:
TJ := 001~120
同时,条件(TJ)允许使用“|”来隔开多个条件,001~120|200~300|350
Belong(TJ,BM)
判断该BM是否在 TJ范围里面,是的话,返回True,否则返回False。请写出详细的代码,如果方法很妙的话,可以另外开贴给分,我现在分很足,给个几百分没问题的,只是要多开几贴。呵呵。
TJ := 001~120
同时,条件(TJ)允许使用“|”来隔开多个条件,001~120|200~300|350
Belong(TJ,BM)
判断该BM是否在 TJ范围里面,是的话,返回True,否则返回False。请写出详细的代码,如果方法很妙的话,可以另外开贴给分,我现在分很足,给个几百分没问题的,只是要多开几贴。呵呵。
var
Counts,num :Integer;
FXTJ : Array of String;
begin
Counts := 0; //多个条件的时候处理
while Pos('|',TJ)>0 do
begin
Counts := Counts + 1;
SetLength(FXTJ,Counts);
num := pos('|',TJ);
FXTJ[Counts-1] := Copy(TJ,1,num-1);
TJ :=Copy(TJ,num+1,length(TJ));
end;
Counts := Counts + 1;
SetLength(FXTJ,Counts);
FXTJ[Counts-1] := TJ; ...
然后再一个个来判断BM是否属于数组FXTJ中的范围,一但满足其中一个,就Result := True;
数组中的条件要按照数字来处理,就是判断编码(BM)是否在条件给定的编码范围里面。
Break出来。 end;
用Pos()肯定不能实现这个功能,这个函数主要是给定一个编码范围条件,然后来判断BM是否属于这个范围。是就返回True,否则返回False。
然后用集全判断
eg:
procedure TForm1.Button1Click(Sender: TObject);
var
Str,subStr : String;
begin
// Str := '001~120|200~300|350'
// if Pos('|',Str) > 0 then
// begin
// ... 自己写吧
// end;
str := '100';
if (StrtoInt(Str) in [strtoInt('001')..strtoInt('120')]) then
showmessage('In');
end;
var
Counts,num,PS :Integer;
FXTJ : String;
begin
RESULT:= FALSE ;
Counts := 0;
num := Pos('|',TJ);
while num>0 do
begin
FXTJ := Copy(TJ,1,num-1);
PS:= POS('~',FXTJ);
TJ :=Copy(TJ,num+1,length(TJ));
if PS>0 THEN
BEGIN
if copmarestr(Copy(FXTJ,1,PS-1),BM)<=0 AND COMPARESTR(COPY(FXTJ,PS+1,NUM-PS-1),BM)>=0 THEN
begin
RESULT:= TRUE;
EXIT;
END
END
ELSE
IF COMPARESTR(FXTJ,BM) THEN
begin
RESULT:= TRUE;
EXIT;
END;
num := pos('|',TJ);
end;
END;