pascal 一些常用函式
維護的一個iss打包指令碼,裡面需要挺多校驗和一些常規操作的函式,所以很多函式都是自己封裝再呼叫,這樣以後維護起來比較方便,改動也比較小,羅列下總結的一些比較通用的函式:
//判斷是否需要安裝某軟體 function NeedInstallsoft(): Boolean; var version: Cardinal; begin result := false; //32位或64位都沒有,才安裝 if (RegQueryDWordValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{appid}', 'Version', version) = false) and (RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{appid}', 'Version', version) = false) then begin result := true;//要安裝 end; end;
//將java路徑加到系統環境變數中 function JavaEnvirUpdate() : Boolean; var javaPath,EnvirPath:String; begin javaPath:= ExpandConstant('c:\java\bin;'); RegQueryStringValue(HKLM, 'System\CurrentControlSet\Control\Session Manager\Environment', 'Path', EnvirPath); if pos(javaPath,EnvirPath) = 0 then begin RegWriteStringValue(HKLM,'System\CurrentControlSet\Control\Session Manager\Environment','Path', javaPath+EnvirPath); end; end;
//把TArrayOfString轉成string的函式 function TArrayOfStringToString(svArray:TArrayOfString): String; var nLines,i:Integer; begin Result := ''; nLines := GetArrayLength(svArray); for i := 0 to nLines - 1 do begin Result := Result+svArray[i]; end; end;
//修改 TArrayOfString 中某一個字串的函式 function TArrayOfStringChanges(svArray:TArrayOfString; FromStr, ToStr: String): TArrayOfString; var nLines,i:Integer; tempStr:String; begin nLines := GetArrayLength(svArray); for i := 0 to nLines - 1 do begin tempStr := svArray[i]; if ( Pos(FromStr, tempStr)>0 ) then begin StringChangeEx(svArray[i], FromStr, ToStr, True); end; end; Result := svArray; end;
//獲取檔案中指定識別符號之間的內容 function GetFileSectionContent(fileBuffer:TArrayOfString;startSection,endSection:String): String; var RetValue,startpos,copycount : Integer; filestring:string; begin filestring := TArrayOfStringToString(fileBuffer); RetValue := Pos(startSection,filestring); if RetValue = 0 then begin exit; end; startpos := RetValue + length(startSection);
RetValue := Pos(endSection,filestring); if RetValue = 0 then begin exit; end; copycount := RetValue - startpos; Result := Copy(filestring,startpos,copycount); end;
//刪除字串中空格的函式 function DelStringSpace(starstring:String): String; begin while pos(' ',starstring)<>0 do begin delete(starstring,pos(' ',starstring),1); end; Result := starstring; end;
//搜尋一個字元出現的次數 function calStringNumber(calstring,stringfile: String): Integer; var RetValue:Integer; begin Result := 0; RetValue := Pos(calstring,stringfile); while (RetValue > 0) do begin Result := Result+1; Delete(stringfile,1,RetValue+length(calstring)-1); RetValue := Pos(calstring,stringfile); end end;
//查打指定埠是否被佔用 function CheckTCPPortAvaliable(Port: String): Boolean; var RunStateContent,IpString,IpStringTotal: String; RetValue,PortSign,i,IpRetValue: Integer; RunStateContentarr:TArrayOfString; begin Result := true; Exec('cmd',ExpandConstant('/C netstat -na | findstr "'+Port+'"|findstr /r "LISTENING CLOSE_WAIT ESTABLISHED TIME_WAIT" >c:\VMtcp.txt'), '', SW_HIDE,ewWaitUntilTerminated, RetValue); LoadStringsFromFile('c:\VMtcp.txt',RunStateContentarr); RunStateContent := TArrayOfStringToString(RunStateContentarr); deleteFile('c:\VMtcp.txt'); IpStringTotal := strArr; IpRetValue := Pos('|',IpStringTotal); while (IpRetValue > 0) do begin IpString := Copy(IpStringTotal,1,IpRetValue-1); Delete(IpStringTotal,1,IpRetValue); PortSign := pos(IpString+':'+Port,RunStateContent); if PortSign> 0 then begin Result := false; exit; end; IpRetValue := Pos('|',IpStringTotal); end; end;
//增加IP地址校驗函式 function IsValidIP(strIP: string): Boolean; var i,j,PartCount: Integer; Part: string; begin PartCount := 0; while strIP <> '' do begin i := Pos('.', strIP); if i = 0 then begin Part := strIP; strIP := ''; end //如果取第四位數值了還有點,說明輸入有問題 //bug id:15828 2017.7.10 by yelu ces3.11.1.0 else if (PartCount = 3) and (i <> 0) then begin Result := False; Exit; end else begin Part := Copy(strIP, 1, i - 1); Delete(strIP, 1, i); end; //判斷字元中是否有空格 //StrToIntDef返回-1說明part這個字串不能正常轉換成整數 if (Pos(' ', Part) > 0) or (StrToIntDef(Part,-1) = -1)then begin Result := False; Exit; end else begin j := StrToIntDef(Part,-1); end; if (j < 0) or (j > 255) then begin Result := False; Exit; end; PartCount := PartCount+1; end; Result := PartCount = 4; //必須要有4段 end;