⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _funct.pas

📁 这个是去年写的东东。 以前公司一直使用易飞ERP
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{===============================================================} 
{ 函数  : RESULTSTRING = HexToBin(HEXSTRING) 
{ 目的   : 把十六进制字符串转换为二进制字符串   
{ 
{===============================================================} 
{ 函数  : RESULTINTEGER = HexCharToInt(HEXCHAR) 
{ 目的   : 转换一个十六进制字符为整数
{===============================================================} 
{ 函数  : RESULTSTRING = HexCharToBin(HEXCHAR) 
{ 目的   : 转换一个十六进制字符为二进制字符串
{===============================================================} 
{ 函数  : RESULTINTEGER = Pow(BASE,POWER) 
{ 目的   : 指数函数
{===============================================================} 
{ 函数  : RESULTINTEGER = BinStrToInt(BINSTRING) 
{ 目的   : 把二进制字符串转换为整数
{===============================================================} 
{ 函数  : RESULTSTRING = DecodeSMS7Bit (PDUSTRING) 
{ 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码 
{===============================================================} 
{ 函数  :  RESULTSTRING = ReverseStr (SOURCESTRING) 
{ 目的   : 反转一个字符串
{===============================================================}
unit _funct;

interface
 uses
  Windows,Classes,Sysutils,inifiles;
  
  function HexToBin(HexNr : string): string;
  function HexCharToInt(HexToken : char):Integer;
  function HexCharToBin(HexToken : char): string;
  function pow(base, power: integer): integer;
  function BinStrToInt(BinStr : string) : integer;
  function DecodeSMS7Bit(PDU : string):string;
  function ReverseStr(SourceStr : string) : string;
  {判断字符是否是数字}
  function IsDigit(ch: char): boolean;
  {判断字符是否是大写字符}
  function IsUpper(ch: char): boolean;
  {判断字符是否是小写字符}
  function IsLower(ch: char): boolean;
  {转换为大写字符}
  function ToUpper(ch: char): char;
  {转换为小写字符}
  function ToLower(ch: char): char;
  { Capitalizes first letter of every word in s }
  function Proper(const s: string): string ;
  {返回两个子字符串之间字符的个数}
  Function p2pcount( s, ss1, ss2 : string ): integer;
  {更快速的字符查询,快40%}
  function ScanStr(ToScan: PChar; Sign: Char):PChar;
  {替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。}
  function replacing(S,source,target:string):string;
  {另两个替换字符串中子串的函数}
  function repl_substr( sub1, sub2, s: string ): string;
  {替換字符串}
  function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String;
  {替换全部子字符串的函数}
  function ReplaceSub(str, sub1, sub2: String): String;
  {在字符串左右填充指定数量的指定字符}
  function UT_PadString(inString :string; maxLength :integer; padChar :char;
           left :boolean) :string;
  {提取字符串中指定子字符串前的字符串}
  Function Before ( Src:string ; Var S:string ) : string ;
  {提取字符串中指定子字符串后的字符串}
  Function After ( Src:string ; Var S:string ) : string ;
  {判断字符串是否可以转换为整数}
  function IsIntStr(const S: string): boolean;
  {从字符串中删除指定字符串}
  function RemoveInvalid(what, where: string): string;
  {根据某个字符分割字符串的函数}
  Procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
 {加密}
  Function EncrypKey (Src:String; Key:String):string;
  {解密函数}
  Function UncrypKey (Src:String; Key:String):string;
  {写ini}
  Function WriteIniFile (inifile:string; inimain:string; inimain2:string; initext:string):Boolean;
  {读INI文件}
  Function ReadIniFile (inifile:string; inimain:string; inimain2:string):String;
  {生成随机数字}
  Function RanNum() : string; stdcall;
  {如果是IP地址返回True,否则,返回False }
  Function ISIPAddr(IPStr:string):Boolean;
  {添加文件,文件名n,添加的字符s}
  Function Apptext(s,Src:string):Boolean;
  {格式化日期.把20050102变成2005-01-02}
  Function FormatSD(s:string):string;
  {检查是否为日期 }
  Function Do_chkdate(s:string):Boolean;

implementation

{把16进制字符串转换为2进制字符串} {}
function HexCharToInt(HexToken : char):Integer;
begin 
  {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32); 
  { use lowercase aswell } 

  Result:=0; 

  if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 } 
     Result:=Ord(HexToken)-48 
  else if (HexToken>#64) and (HexToken<#71) then  { chars A....F } 
     Result:=Ord(HexToken)-65 + 10; 
end; 

{转换一个16进制字符为整数}
function HexCharToBin(HexToken : char): string;
var DivLeft : integer; 
begin 
    DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN } 
    Result:=''; 
                                       { Use reverse dividing } 
    repeat                             { Trick; divide by 2 } 
      if odd(DivLeft) then             { result = odd ? then bit = 1 } 
        Result:='1'+Result             { result = even ? then bit = 0 } 
      else 
        Result:='0'+Result; 

      DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 } 
    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits } 
end; 

{转换一个16进制字符为2进制字符串}
function HexToBin(HexNr : string): string;
{ only stringsize is limit of binnr } 
var Counter : integer; 
begin 
  Result:=''; 
  for Counter:=1 to length(HexNr) do
    Result:=Result+HexCharToBin(HexNr[Counter]);
end; 

{指数函数}
function pow(base, power: integer): integer;
var counter : integer; 
begin 
  Result:=1; 
  for counter:=1 to power do
    Result:=Result*base; 
end; 

{把2进制字符串转换为整数}
function BinStrToInt(BinStr : string) : integer;
var counter : integer;
begin 
  if length(BinStr)>16 then 
    raise ERangeError.Create(#13+BinStr+#13+ 
            'is not within the valid range of a 16 bit binary.'+#13); 

  Result:=0; 

  for counter:=1 to length(BinStr) do 
      if BinStr[Counter]='1' then 
        Result:=Result+pow(2,length(BinStr)-counter); 
end; 

{解码一个7-bit SMS (GSM 03.38) o ASCII码}
function DecodeSMS7Bit(PDU : string):string;
var OctetStr : string; 
    OctetBin : string; 
    Charbin  : string; 
    PrevOctet: string; 
    Counter  : integer; 
    Counter2 : integer; 
begin 
  PrevOctet:=''; 
  Result:=''; 

  for Counter:=1 to length(PDU) do 
    begin 
      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous } 
        begin 
          if BinStrToInt(PrevOctet)<>0 then 
            Result:=Result+Chr(BinStrToInt(PrevOctet)) 
          else Result:=Result+' '; 

          PrevOctet:=''; 
        end; 

      if Odd(Counter) then            { only take two nibbles at a time } 
        begin 
          OctetStr:=Copy(PDU,Counter,2); 
          OctetBin:=HexToBin(OctetStr); 

          Charbin:=''; 
          for Counter2:=1 to length(PrevOctet) do 
            Charbin:=Charbin+PrevOctet[Counter2]; 

          for Counter2:=1 to 7-length(PrevOctet) do 
            Charbin:=OctetBin[8-Counter2+1]+Charbin; 

          if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin)) 
            else Result:=Result+' '; 

          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1); 
        end; 
    end; 
end; 

{反转一个字符串}
function ReverseStr(SourceStr : string) : string;
var Counter : integer; 
begin 
  Result:=''; 

  for Counter:=1 to length(SourceStr) do 
    Result:=SourceStr[Counter]+Result; 
end;

 ////////////////////////////////////////////////////////
{判断字符是否是数字}
function IsDigit(ch: char): boolean;
begin
  Result := ch in ['0'..'9'];
end;

{判断字符是否是大写字符}
function IsUpper(ch: char): boolean;
begin
  Result := ch in ['A'..'Z'];
end;

{判断字符是否是小写字符}
Function IsLower(ch: char): boolean;
begin
  Result := ch in ['a'..'z'];
end;

{转换为大写字符}
Function ToUpper(ch: char): char;
begin
  Result := chr(ord(ch) and $DF);
end;

{转换为小写字符}
Function ToLower(ch: char): char;
begin
  Result := chr(ord(ch) or $20);
end;

{ Capitalizes first letter of every word in s }
Function Proper(const s: string): string;
var
  i: Integer;
  CapitalizeNextLetter: Boolean;
begin
  Result := LowerCase(s);
  CapitalizeNextLetter := True;
  for i := 1 to Length(Result) do
  begin
    if CapitalizeNextLetter and IsLower(Result[i]) then
      Result[i] := ToUpper(Result[i]);
    CapitalizeNextLetter := Result[i] = ' ';
  end;
end;
////////////////////////////////////////////////////////////

{返回两个子字符串之间字符的个数}
Function p2pcount( s, ss1, ss2 : string ): integer;
var i, j, slen : integer;
begin
   i := pos( ss1, s );
   j := pos( ss2, s );
   slen := Length(ss2); 
   if j >= i then
     Result := j - i + slen
   else
     Result := 0;
end;

{更快速的字符查询,快40%}
Function ScanStr(ToScan: PChar; Sign: Char):PChar;
begin
  Result:= nil;
  if ToScan <> nil then
    while (ToScan^ <> #0) do begin
      if ToScan^ = Sign then begin
        Result:= ToScan;
        break;
       end;
     inc(ToScan);
    end;
end;

/////////////////////////////
{替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。}
function replacing(S,source,target:string):string;
var site,StrLen:integer;
begin
  {source在S中出现的位置}
  site:=pos(source,s);
  {source的长度}
  StrLen:=length(source);
  {删除source字符串}
  delete(s,site,StrLen);
  {插入target字符串到S中}
  insert(target,s,site);
  {返回新串}
  replacing:=s;
end;
///////////////////////

{另两个替换字符串中子串的函数}
function repl_substr( sub1, sub2, s: string ): string;
var i: integer;
begin
   repeat
     i := pos( sub1, s ) ;
     if i > 0 then begin
       delete( s, i, Length(sub1));
       insert( sub2, s, i );
     end;
   until i < 1;
   Result := s;
end;

{替換字符串}
Function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String;
Var
  Position: Integer;
  TempStr: String;
begin
  Position := Pos(ReplacePiece,S);
  if Position > 0 then Begin
    TempStr := S;
    Delete(TempStr,1,Position-1+Length(ReplacePiece));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -