2014-06-09 501 views
4

我正在使用Inno安裝程序,並且希望使用Pascal腳本檢查字符串變量是否爲整數(僅限0-9,無十六進制)。我有此funcion:如何檢查一個變量是否是一個整數?

function IsInt(s: string): boolean; 
var 
    i, len: Integer; 
begin 
    len := length(s); 

    if len = 0 then 
    result := false 
    else 
    begin 
    result := true; 
    for i := 1 to len do 
    begin 
     if not (s[i] in ['0'..'9']) then !!! ERROR HERE !!! 
     begin 
     result := false; 
     exit; 
     end; 
    end; 
    end; 
end; 

但是,編譯器會引發錯誤:

Closing square bracket (']') expected. 

如何解決呢?

如果我改變行這樣的:

if not (s[i] in ['0','1','2','3','4','5','6','7','8','9']) then 

它符合,但如果被執行的代碼它給這個錯誤:

Runtime Error - Invalid Type. 

怎麼辦?

+0

看起來像是要檢查'String'是否是'Number',而不是'Integer'。我對嗎?因爲當它傳遞一個十六進制數時,你不需要它返回True。 – GTAVLover

回答

3

而不是使用集,你可以做一個簡單的範圍測試,例如,

IF (s[i] < '0') OR (s[i] > '9') THEN 
    ... 
+3

...因爲Inno Setup Pascal Script不支持範圍設置... – TLama

2

從帕斯卡爾腳本文件

Prototype: function StrToIntDef(s: string; def: Longint): Longint;

Description: The StrToInt function converts the string passed in S into a number. If S does not represent a valid number, StrToInt returns the number passed in Def.

如此Def設置爲-1,如果你的字符串不是一個數字,將返回-1。

+1

謝謝,但那不是我所需要的。只有從0到9的數字才能被接受爲整數。 StrToIntDef也接受Hex:StrToIntDef('$ 1E',0)將會給出30.無論如何,這個函數對其他用例來說是有用的。 – TomCat500

相關問題