1. 程式人生 > >pascal 一些常用函式

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;