在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转帖: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\text.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 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论