delphi中常用的字符处理函数

该日志由 samool 发表于 2006-05-08 10:44 AM

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(chchar): boolean
begin 
Result 
:= ch in ['0'..'9']; 
end
{
判断字符是否是大写字符
function 
IsUpper(chchar): boolean
begin 
Result 
:= ch in ['A'..'Z']; 
end
{
判断字符是否是小写字符
function 
IsLower(chchar): boolean
begin 
Result 
:= ch in ['a'..'z']; 
end
{
转换为大写字符
function 
ToUpper(chchar): char
begin 
Result 
:= chr(ord(ch) and $DF); 
end
{
转换为小写字符
function 
ToLower(chchar): char
begin 
Result 
:= chr(ord(ch) or $20); 
end
Capitalizes first letter of every word in s 
function 
Proper(const sstring): string
var 
iInteger
CapitalizeNextLetterBoolean
begin 
Result 
:= LowerCase(s); 
CapitalizeNextLetter := True
for 
:= 1 to Length(Result) do 
begin 
if CapitalizeNextLetter and IsLower(Result[i]) then 
Result
[i] := ToUpper(Result[i]); 
CapitalizeNextLetter := Result[i] = ' '
end
end
//////////////////////////////////////////////////////////// 
{返回两个子字符串之间字符的个数
Function 
p2pcountsss1ss2 string ): integer
var 
ijslen integer
begin 
:= posss1); 
:= posss2); 
slen := Length(ss2); 
if 
>= i then Result := slen else Result := 0
end
{
更快速的字符查询,快40%} 
function 
ScanStr(ToScanPCharSignChar):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_substrsub1sub2sstring ): string
var 
iinteger
begin 
repeat 
:= possub1) ; 
if 
0 then begin 
delete
siLength(sub1)); 
insertsub2s); 
end
until i 1
Result := s
end
function 
ReplaceText(const S,ReplacePiece,ReplaceWithString):String
Var 
PositionInteger
TempStrString
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(strsub1sub2String): String
var 
aPosInteger
rsltString
begin 
aPos 
:= Pos(sub1str); 
rslt := ''
while (
aPos <> 0) do begin 
rslt 
:= rslt Copy(str1aPos 1) + sub2
Delete(str1aPos Length(sub1)); 
aPos := Pos(sub1str); 
end
Result := rslt str
end
///////////////////////// 
在字符串左右填充指定数量的指定字符 
function UT_PadString(inString :stringmaxLength :integerpadChar :char
left :boolean) :string
begin 
result 
:= inString
while (
Length(result) < maxLength) do 
if (
leftthen 
result 
:= padChar result 
else 
result := result padChar
end
///////////////////////////////////// 
提取字符串中指定子字符串前的字符串 
Function Before Src:string ; Var S:string ) : string 
Var 
Word 
begin 
:= POS (Src,S) ; 
if 
F=0 then 
Before 
:= 
else 
Before := COPY(S,1,F-1) ; 
end 
////////////////////////////////// 
提取字符串中指定子字符串后的字符串 
Function After Src:string ; Var S:string ) : string 
Var 
Word 
begin 
:= POS (Src,S) ; 
if 
F=0 then 
After 
:= '' 
else 
After := COPY(S,F+length(src),length(s)) ; 
end 
//////////////////////////////////// 
判断字符串是否可以转换为整数 
function IsIntStr(const Sstring): boolean
begin 
Result
:=StrToIntDef(S,0)=StrToIntDef(S,1); 
end
////////////////////////////////////// 
从字符串中删除指定字符串 
procedure RemoveInvalid
(whatwherestring): string
var 
tstrstring
begin 
tstr
:=where
while 
pos(whattstr)>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
(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
integer
begin 
Terms
.Clear// First remove all remaining terms 
if Length(s)=0 then // Nothin' to separate 
Exit; 
p:=Pos(Separator,s); 
while 
P<>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
integer
const 
TestStr '1st term;2nd term;3rd term'
begin 
Terms
:=TStringList.Create
SeparateTerms(TestStr,';',Terms); 
for 
i:=0 to terms.Count-do 
ShowMessage(Terms.Strings[i]); 
Terms.Free
end
///////////////////////////// 
根据一组字符分割字符串的函数 
type 
Charset 
set of Char
var 
Text
String
procedure WriteStringSplitted(var sStringSeparatorsCharset); 
var 
a,Integer; {anfang und ende des w鰎tchens
begin 
:= 1
for 
:= 1 to Length(s) do 
if 
s[ein Separators then begin 
WriteLn
(Copy(sae-a)); 
:= 1
end
WriteLn(Copy(sae-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(basepowerinteger): 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 Trickdivide by 2 
if 
odd(DivLeftthen result odd then bit 
Result:='1'+Result result even then bit 
else 
Result:='0'+Result
DivLeft:=DivLeft div 2; { keep dividing till 0 left and length 
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(basepowerinteger): 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
PrevOctetstring
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(Counterthen 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, 字符, 函数  tiffany jewelry  
网摘: Yahoo Baidu Google Bolaa 365Key Yesky Wozhai POCO ViVi YouNote Hexun Del.icio.us Yeeyoo igooi I2Key Cn3 Bytemen Furl Blinklist Blogmarks Technorati 分享到饭否
相关文章: (最多只显示5条记录)
如何判断按下的是回车键? (浏览:2161, 评论:0)
Borland把Delphi卖掉了 (浏览:1860, 评论:0)
Delphi常用的函数库 (浏览:2575, 评论:0)
Delphi如何开发游戏外挂 (浏览:2909, 评论:0)
Delphi大富翁论坛离线数据大全 (浏览:1893, 评论:0)
发表评论:( 来了就留个脚印吧!你的参与是我最大的动力!)

    

(单击图片换张图片)