• delphi字符串函数大全


    转帖:delphi字符串函数大全 2009-11-17 16:43:55

    分类:

    delphi字符串函数大全
    ━━━━━━━━━━━━━━━━━━━━━
    首部 function StringToGUID(const S: string): TGUID; $[SysUtils.pas
    功能 返回字符串S转换成全局标识
    说明 如果字符串非法将触发异常
    参考 fuction Windows.Succeeded
    例子 Edit2.Text := GUIDToString(StringToGUID(Edit1.Text));
    ━━━━━━━━━━━━━━━━━━━━━
    首部 function GUIDToString(const GUID: TGUID): string; $[SysUtils.pas
    功能 返回全局标识GUID转换成字符串
    说明 <NULL>
    参考 fuction Windows.Succeeded
    例子 Edit2.Text := GUIDToString(StringToGUID(Edit1.Text));
    ━━━━━━━━━━━━━━━━━━━━━

    =================================================
    日期与时间函数 (Date and Time Routines)
    Unit: SysUtils
    ========================================
    Date 传回今天日期。function Date: TDateTime;
    DateTimeToStr 将时间格式转为字串。function DateTimeToStr(DateTime: TDateTime):String;
    DateTimeToString 将时间格式转为字串。
    procedure DateTimeToString(var Result: string;const Format: string;DateTime: TDateTime);
    DateToStr 将日期格式转为字串。function DateToStr(Date: TDateTime): String;
    DayOfWeek 传回今天星期几。function DayOfWeek(Date: TDateTime): Integer;
    DecodeDate 分解所指定的日期为年、月、日。
    procedure DecodeDate(Date: TDateTime;var Year, Month, Day:Word);
    DecodeTime 分解所指定的日期为时、分、秒。
    procedure DecodeTime(Time: TDateTime;var Hour, Min, Sec,MSec: Word);
    EncodeDate 传回将年、月、日所组合的日期格式。
    function EncodeDate(Year, Month, Day: Word):TDateTime;
    EncodeTime 传回将时、分、秒所组合的时间格式。
    function EncodeTime(Hour, Min, Sec, MSec:Word): TDateTime;
    FormatDateTime 以指定的格式传回日期时间。
    function FormatDateTime(const Format: string;DateTime: TDateTime):String;
    Now 传回现在的日期时间。function Now: TDateTime;
    StrToDate 将字串转为日期格式。function StrToDate(const S:string): TDateTime;
    StrToDateTime 将字串转为日期时间格式function StrToDateTime(const S: string): TDateTime;
    StrToTime 将字串转为时间格式。function StrToTime(const S:string): TDateTime;
    Time 传回现在时间。function Time: TDateTime;
    TimeToStr 将时格式转为字串。function TimeToStr(Time:TDateTime): String;
    ========================================
    档案管理函数
    Unit: SysUtils
    ========================================
    ChangeFileExt 变更档案的延伸档名。
    function ChangeFileExt(const FileName,Extension: string):string;
    DateTimeToFileDate 将Delphi 的日期格式转换为DOS的日期格式。
    functionDateTimeToFileDate(DateTime:TDateTime): Longint;
    DeleteFile 删除一个档案。
    function DeleteFile(const FileName: string):Boolean;
    DiskFree 传回磁碟的可用空间。function DiskFree(Drive: Byte): Longint;
    DiskSize 传回指定磁碟的容量大小。function DiskSize(Drive: Byte): Longint;
    ExpandFileName 传回一个完整的路径及档名字串。
    function expandFileName(const FileName: string):string;
    ExtractFileExt 传回档案的延伸档名。function ExtractFileExt(const FileName string):string;
    ExtractFileName 传回档案的档名。function ExtractFileName(const FileName: string):string;
    ExtractFilePath 传回档案的路径。function ExtractFilePath(const FileName: string):string;
    FileAge 传回档案的年纪function FileAge(const FileName: string):Longint;
    FileCreate 以指定档名建立一个档案。function FileCreate(const FileName: string):Integer;
    FileClose 关闭指定的档案。procedureFileClose(Handle: Integer);
    FileDateToDateTime 将DOS 的日期格式转为Delphi 的日期格式。
    function FileDateToDateTime(FileDate: Longint):TDateTime;
    FileExists 判别档案是否存在。function FileExists(const FileName: string):Boolean;
    FileGetAttr 传回档案属性。function FileGetAttr(const FileName: string):Integer;
    FileGetDate 传回档案的日期及时间。function FileGetDate(Handle: Integer): Longint;
    FileRead 从指定的档案读入资料。
    function FileRead(Handle:Integer; var Buffer;Count:Longint):Longint;
    FileSearch 在目录列中搜寻指定的档案。function FileSearch(constName, DirList: string):string;
    FileSeek 改变档案游标的位置。function FileSeek(Handle: Integer;Offset: Longint;Origin: Integer):Longint;
    FileSetAttr 设定档案属性。function FileSetAttr(const FileName: string;Attr:Integer): Integer;
    FileSetDate 设定档案的日期及时间。procedure FileSetDate(Handle: Integer; Age:Longint);
    FileOpen 开启档案。function FileOpen(const FileName: string; Mode:Word): Integer;
    FileWrite 写资料到档案。function FileWrite(Handle:Integer;const Buffer; Count:Longint): Longint;
    FindClose 终止找寻第一个/下一个的动作。procedure FindClose(var SearchRec: TSearchRec);
    FindFirst 寻找第一个符合的档案并设定其属性。
    function FindFirst(const Path: string;Attr: Word; var F:TSearchRec): Integer;
    FindNext 传回下一个符合的档案。function FindNext(var F:TSearchRec): Integer;
    RenameFile 变更档名。function RenameFile(const OldName,NewName: string):Boolean;

    怎样在 CASE 语句中使用字符串
    /////////////////////////////////////////
    首先建立 CaseString 函数,用于获取某字符串在一个字符串数组中的顺序:
    function CaseString (const s: string;
                           const x: array of string): Integer;
    var i: Integer;
    begin
    Result:= -1; // Default return parameter
    for i:= Low (x) to High (x) do begin
        if s = x[i] then begin Result:= i; Exit; end;
    end;
    end;
    Low() 提供第一个数组成员(通常是0),High() 则返回最后一个。因为 CaseString 返回的是待查字符串在字符串数组中的位置,因此,它可以被直接用到 CASE 语句中:
    search:= 'delphi3000';
    case CaseString (search, ['delphi3000',
                                 'delphipages',
                                 'Torry's']) of
        0: s:= 'Excellent!';
        1: s:= 'Good source';
        2: s:= 'Not bad!';
    end;

    copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回.假设str为'abcdef',copy(str,3,2)='cd',copy(str,4,10)='def'
    concat(str1,str2{,strn}) 把各自变量连接起来,返回连接后的字符串(长度不能超过255)
    length(str)       返回str的字符个数,即其长度.
    pos(obj,target)   在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0.
    AnsiStrLastChar('你好')结果是“好”。如果有半个汉字出现,返回这半个汉字。二者字符串长度分别为2和1。
    CompareStr - 区分大小写
    CompareText - 不区分大小写
    ////////////////////////////////////////////////////////
    {判断字符是否是数字}
    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));
        Result :=
    Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith)
    End else Result := S;
    end;
    ////////////////////////
    替换全部子字符串的函数
    function ReplaceSub(str, sub1, sub2: String): String;
        var
        aPos: Integer;
        rslt: String;
    begin
        aPos := Pos(sub1, str);
        rslt := '';
        while (aPos <> 0) do begin
          rslt := rslt + Copy(str, 1, aPos - 1) + sub2;
          Delete(str, 1, aPos + Length(sub1));
          aPos := Pos(sub1, str);
        end;
        Result := rslt + str;
    end;
    /////////////////////////
    在字符串左右填充指定数量的指定字符
    function UT_PadString(inString :string; maxLength :integer; padChar :char;
    left :boolean) :string;
    begin
    result := inString;
    while (Length(result) < maxLength) do
        if (left) then
          result := padChar + result
        else
          result := result + padChar;
    end;
    /////////////////////////////////////
    提取字符串中指定子字符串前的字符串
    Function Before ( Src:string ; Var S:string ) : string ;
    Var
    F : Word ;
    begin
    F := POS (Src,S) ;
    if F=0 then
        Before := S
       else
        Before := COPY(S,1,F-1) ;
    end ;
    //////////////////////////////////
    提取字符串中指定子字符串后的字符串
    Function After ( Src:string ; Var S:string ) : string ;
    Var
    F : Word ;
    begin
    F := POS (Src,S) ;
    if F=0 then
        After := ''
       else
        After := COPY(S,F+length(src),length(s)) ;
    end ;
    ////////////////////////////////////
    判断字符串是否可以转换为整数
    function IsIntStr(const S: string): boolean;
    begin
    Result:=StrToIntDef(S,0)=StrToIntDef(S,1);
    end;
    //////////////////////////////////////
    从字符串中删除指定字符串
    procedure RemoveInvalid(what, where: string): string;
    var
    tstr: string;
    begin
    tstr:=where;
    while pos(what, tstr)>0 do
        tstr:=copy(tstr,1,pos(what,tstr)-1) +
           copy(tstr,pos(what,tstr)+length(tstr),length(tstr));
    Result:=tstr;
    end;
    用法:
    NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to
           remove the word <invalid>');
    ///////////////////////////////////////////
    根据某个字符分割字符串的函数
    procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
    { This browses a string and divide it into terms whenever the given
    separator is found. The separators will be removed }
    var
    hs : string;
    p : integer;
    begin
    Terms.Clear; // First remove all remaining terms
    if Length(s)=0 then   // Nothin' to separate
        Exit;
    p:=Pos(Separator,s);
    while P<>0 do
    begin
        hs:=Copy(s,1,p-1);   // Copy term
        Terms.Add(hs);       // Add to list
        Delete(s,1,p);       // Remove term and separator
        p:=Pos(Separator,s); // Search next separator
    end;
    if Length(s)>0 then
        Terms.Add(s);        // Add remaining term
    end;
    ==========
    = 用 法
    ==========
    var
    Terms : TStringList;
    i : integer;
    const
    TestStr = '1st term;2nd term;3rd term';
    begin
    Terms:=TStringList.Create;
    SeparateTerms(TestStr,';',Terms);
    for i:=0 to terms.Count-1 do
        ShowMessage(Terms.Strings[i]);
    Terms.Free;
    end;
    /////////////////////////////
    根据一组字符分割字符串的函数
    type
    Charset = set of Char;
    var
    f : Text;
    s : String;
    procedure WriteStringSplitted(var s: String; Separators: Charset);
    var
    a,e : Integer; {anfang und ende des w鰎tchens}
    begin
    a := 1;
    for e := 1 to Length(s) do
    if s[e] in Separators then begin
       WriteLn(Copy(s, a, e-a));
       a := e + 1;
    end;
    WriteLn(Copy(s, a, e-a+1));
    end;
    begin
    Assign(f, 'c:dingsbums ext.txt');
    Reset(f);
    while not EOF(f) do begin
    ReadLn(f,s);
    WriteStringSplitted(s, [':', ',']);
    end;
    Close(f);
    end.
    //////////////////////////////////////////////////
    {===============================================================}
    { 函数 : 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 BinHexTools;
    interface
    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;
    implementation
    uses sysutils, dialogs;
    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;
    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;
    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;
    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;
    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;
    end.
    在Delphi中没有前导0输出的函数,如C语言中printf("%08d",10);就会输"000000010",但是在实际应用中经常会用到此种函数,如财务等数据的输出。如何实现?以下的代码实现了这种功能,
    function qd0str(const count,num:integer):String;
    Var
    s1,s2:String;
    begin
    s1:=IntToStr(Num);
    s2:='00000000000000000000';
    if (Length(s1)>=count) then
    s2:=''
    else if(count>20) then
    SetLength(S2,20-Length(s1))
    else
    SetLength(S2,count-Length(s1));
    Result:=S2+S1;
    end;
    函数的参数count为输出字符串的总长度,在函数中定义为最大20。Num为需要转换成字符串的数据。
    ////////////////////////////////////////
    function IntToLZStr(value : integer;digits : byte) : string;
    var
    Res : string;

    begin
    Res:=IntToStr(value);
    while Length(Res)<digits do
        Insert('0',res,1);
    IntToLZStr:=Res;
    end;

  • 相关阅读:
    [洛谷P1507]NASA的食物计划 以及 对背包问题的整理
    [洛谷P3811]【模板】乘法逆元
    56级信息奥赛12学子汇总
    [洛谷U63006]导函数最小系数
    [洛谷U62364]三次函数极值
    [洛谷U62358]求导函数
    Nagios 请检查HTTP服务器关于该CGI的访问权限设置
    安装Cacti-plugin
    解压安装Cacti在apache中的补充
    64位操作系统下IIS报“试图加载格式不正确的程序”错误
  • 原文地址:https://www.cnblogs.com/edwardsun/p/3506579.html
Copyright © 2020-2023  润新知