维护的一个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;

pascal 一些常用函数相关推荐

  1. DELPHI常用函数集及简要范例 3

    ##DiskFree, DiskSize Example ----------------------------------------------------------------------- ...

  2. Matlab常用函数集锦

    ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数 nnz(A)返回A中 ...

  3. matlab常用函数与常用指令大全

    matlab常用函数与常用指令大全 matlab常用函数- - 1.特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 i ...

  4. C语言程序设计(常用函数说明)

    C语言程序设计(常用函数说明) C 语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11计算机上使用.它由早期的编程语言 BCPL(Basi ...

  5. Delphi----DELPHI常用函数集及简要范例(转载大富翁)

    KeyLife富翁笔记   作者 : nakata_wang 标题 : DELPHI常用函数集及简要范例 关键字: HELP Functions 函数集 简要范例 分类 : 个人专区 密级 : 公开 ...

  6. DELPHI常用函数集及简要范例(转载大富翁)

    KeyLife富翁笔记   作者 : nakata_wang 标题 : DELPHI常用函数集及简要范例 关键字: HELP Functions 函数集 简要范例 分类 : 个人专区 密级 : 公开 ...

  7. matlabstrcmpi_matlab 常用函数

    一 matlab常用函数 1. 特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN ...

  8. php内置常用函数是哪些,PHP常用函数有哪些

    PHP常用函数有哪些 导语:PHP主要通过函数实现一些功能,那PHP常用函数有哪些呢?下面就由小编为大家介绍一下,欢迎大家阅读! 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2) ...

  9. Lua基本语法-书写规范以及自带常用函数

    Lua基本语法-书写规范和常用函数 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 String O ...

  10. SQLserver 常用函数适用方法(转载)

    SQL Server 常用函数使用方法(持续更新) 之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值 ...

最新文章

  1. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.
  2. 项目跑到到了日志警告就卡住了_java中的日志框架梳理(以故事的形式呈现)...
  3. SAP offline应用的flush按钮实现
  4. 在单独的WAR组件中对SPA资源和API实现进行分区
  5. 根据数据库中的值用js设置RadioButtonList选中与否
  6. 兼容最新PS2021 Raya Pro 5 for Mac——值得推荐的PS终极数字混合扩展面板
  7. Reveal v4(8796) 使用
  8. centos7下的elasticsearch-6.2.4安装
  9. enq: TT - contention等待事件
  10. mysql关于学校的专业院系_大学里分的院校和分专业系有什么不同
  11. Flutter布局常用widgets
  12. xp 无法运行 php.exe,【xpexe文件不能执行】xp exe文件打不开_xp系统exe文件打不开-系统城...
  13. 1到100的偶数之和是多少_什么白酒适合收藏,收藏多久出手,茅台五粮液老酒价格是多少?...
  14. DataTable 更改在有数据列的类型方法
  15. pymysql安装_Python 新手入门必学模块之:pymysql
  16. 【暴力破解】字典工具
  17. 【类型初始值设定项引发异常】问题解决
  18. 德州大学达拉斯分校计算机工程,“你的留学故事”| 德克萨斯大学达拉斯分校交换生感悟...
  19. 以Crotex M3为例讲解stm32芯片内部原理
  20. 使用腾讯乐固加固安卓APK

热门文章

  1. 广数928te_广数928TE系统说明书
  2. 幅频特性、相频特性的概念解释
  3. AB罗克韦尔-pid教程
  4. iOS 实时录音和播放
  5. 基于html房屋管理系统,一种Web界面的互联网房屋销售管理系统设计的制作方法...
  6. 3DMax基础入门教程,命令面板的设置简介以及功能
  7. 从dig命令理解DNS
  8. 集成海康威视Sadp SDK实现设备激活
  9. 《实战 Java 高并发程序设计》笔记——第1章 走入并行世界(一)
  10. PCS7服务器数据包安装位置,PCS7中应用PH服务器的配置问题