pascal 一些常用函数
維護(hù)的一個iss打包腳本,里面需要挺多校驗和一些常規(guī)操作的函數(shù),所以很多函數(shù)都是自己封裝再調(diào)用,這樣以后維護(hù)起來比較方便,改動也比較小,羅列下總結(jié)的一些比較通用的函數(shù):
//判斷是否需要安裝某軟件
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路徑加到系統(tǒng)環(huán)境變量中
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轉(zhuǎn)成string的函數(shù)
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 中某一個字符串的函數(shù)
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;
//獲取文件中指定標(biāo)識符之間的內(nèi)容
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;
//刪除字符串中空格的函數(shù)
function DelStringSpace(starstring:String): String;
begin
?while pos(' ',starstring)<>0 do begin
??delete(starstring,pos(' ',starstring),1);
?end;
?Result := starstring;
end;
//搜索一個字符出現(xiàn)的次數(shù)
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地址校驗函數(shù)
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
??? //如果取第四位數(shù)值了還有點(diǎn),說明輸入有問題
??? //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這個字符串不能正常轉(zhuǎn)換成整數(shù)
?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;
?
總結(jié)
以上是生活随笔為你收集整理的pascal 一些常用函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统分析师-论文准备
- 下一篇: java基础案例教程第二版pdf,Jav