簡短的答案是否定的,但你可以實現類似的東西,就像這樣。它可以處理的範圍,格式爲(「5,17-30,69」)等等。請注意,我用「 - 」而不是「..」
注意我剛纔剪切和粘貼功能,我已經使用了很多年 - 爲了這個特殊目的,你可能會做得更好。
unit UnitTest2;
interface
uses
System.SysUtils;
type
TMyInteger = record
private
Data: integer;
public
class operator In(a: TMyInteger; const pVal : string): boolean;
end;
implementation
{ TMyInteger }
type EDSMListError = class(Exception);
function SplitDSMList(var List : string;
var First : integer;
var Last : integer) : boolean;
var
i : integer;
ProcessingLast : boolean;
begin
// splits list of form like '1-3,5,9,11-23' and so on
// Returns TRUE if there has been a split, and false otherwise.
// Space characters are ignored
// If the above string were passed, the return values would be
// List = '5,9,11-23'
// First = 1
// Last = 3
// return = TRUE
// The next call would return
// List = '9,11-23'
// First = 5
// Last = 5
Result := FALSE;
First := 0;
Last := 0;
ProcessingLast := FALSE;
for i := 1 to Length(List) do
begin
case List[i] of
'0'..'9':
begin
if ProcessingLast then
begin
Last := Last * 10 + Ord(List[i]) - Ord('0');
Result := TRUE;
end
else
begin
First := First * 10 + Ord(List[i]) - Ord('0');
Last := First;
Result := TRUE;
end;
end;
'-':
begin
ProcessingLast := TRUE;
Last := 0;
Result := TRUE;
end;
',':
begin
Result := TRUE;
List := Copy(List, i + 1, Length(List) - i);
Exit;
end;
' ':
// ignore spaces
;
else
// illegal character
raise EDSMListError.Create('Illegal character found in list "' + List + '"');
end;
end;
// If we get here we have reached the end of the message, so...
List := '';
end;
function ValueInDSMList(const List : string; const Val : integer) : boolean;
var
iList : string;
iBegin, iEnd : integer;
begin
iList := List;
Result := FALSE;
while SplitDSMList(iList, iBegin, iEnd) do
begin
// assume sorted!
if Val < iBegin then
begin
exit;
end
else if Val <= iEnd then
begin
Result := TRUE;
exit;
end;
end;
end;
class operator TMyInteger.In(a: TMyInteger; const pVal: string): boolean;
begin
Result := ValueInDSMList(pVal, a.Data);
end;
end.
你會再使用類似
如果在「500-600」,那麼....
來源
2016-03-04 10:14:35
Dsm
有,如果你是負責編譯器的工程師;) –
我可以做一個預處理器..... – Johan
那你可以做的。記得要加線在一段時間:) –