📄 strprocess.pas
字号:
{
例程作者:李龙武。版权归洪涛软件所有 1999-12-1
例程说明:
}
unit StrProcess;
interface
uses
Classes,SysUtils,Graphics,dialogs;
const
TooLong=' is too long!';
EmptyStr=' is an empty string value!';
EmptyHex=' is an empty Hex value!';
EmptyBinary=' is an empty binary value!';
InvalidHex=' is invalid Hex value!';
InvalidSize=' is a invalid value with the binary size.';
InvalidBinary=' is invalid binary value!';
LoopReplace1='The string replaced and the string replacing with are the SAME!';
LoopReplace2='Case Sensitive is FALSE.'+LoopReplace1;
type
EStrToCharError=class(exception);
EHexToIntError=class(exception);
EIntToBinError=class(exception);
EBinToIntError=class(exception);
EReplaceError=class(exception);
TStrException=class of exception;
{ 数制转换}
function HexToInt(Hex:String):integer; //将一个十六进制的值转换成整型
function IntToBin(Int: LongInt;Size: Integer): String; //将一个十进制整型转换成二进制值
function BinToInt(Bin: string): LongInt; //将一个十进制整型转换成二进制值
function BinToHex(Bin:string;Size:integer):string; //将二进制转换成十六进制
function HexToBin(Hex:string;Size:integer):string; //将十六进制转换成二进制
{字符处理}
//字符的种类
function IsNumber(Ch: char):boolean; //判断一个字符是否是一个数字
function IsLetter(Ch:char):boolean; //判断一个字符是否是一个字母
function IsSign(Ch:char):boolean;//判断一个字符是否是一些符号' ','\' '>'等。
function IsPrint(Ch:char):boolean;//判断一个字符是否是可显示出来的字符
{字符串处理}
//串转换/转化
function StrToChar(Str:string):char; //将单个字符的串转换成字符
function IntToStrPad0(Digital,Size:integer;Before:boolean):string;//将一个整型数转换成一个在前/后添加若干个0的串
//字符数目
function GetMaxWordNumber(var MaxLineID:integer;List:TStringList):integer; //获取最大行的行号及字母数。
function GetChineseWordNumber(Str:string):integer; //获取一个串中汉字的个数
function GetEnglishWordNumber(Str:string):integer; //获取一个串中英文字母个数
//字符输出空间
function GetTextOutWidth(Canvas:TCanvas;Str:String;WordSpace:integer):integer;//获取一个串输出时的宽度(Pixel)
function GetTextOutHeight(Canvas:TCanvas;List:TStringList;LineSpace:integer):integer;//获取StringList输出时的高度。
//串的排列顺序
function Reversed(Str:string):string; //倒排字符串
//子串在串中的位置
function ReversedPos(SubStr,Str:string):integer; //查找最右边的SubStr在Str中的位置。与Pos相反。
function LeftLastPos(Str:string;FindChar:Char):integer;//查找某一个字符在串左边的最后的位置
function RightBeforePos(Str:string;FindChar:char):integer;//查早某一字符在右边最前的位置
function LastPos(Str:string;FindChar:char):integer;overload;//查找某一字符在串中最后的位置。返回0表示没有这样的字符
function LastPos(Str:string;FindStr:string):integer;overload;//查找某一字符在串中最后的位置。返回0表示没有这样的字符
function AnyPos(Str,FindStr:string;CaseSensitive:boolean):integer;//可以按是否区分大小写来查找第一个FindStr的位置,其余功能同Pos
function AnyLastPos(Str,FindStr:string;CaseSensitive:boolean):integer;//可以按是否区分大小写来查找最后一个FindStr的位置,其余功能同LastPos
procedure GetSubInfoInStr(Str,SubStr:string;CaseSensitive:boolean;var InfoList:TStringList);//获取一个串中所有子串在串中的位置
//字符串的替换
//字符串的替换--用RepStr代替SignChar位置前、后、之间的的串
function ReplaceLeft(Str,RepStr:string;SignChar:char):string;//RepStr替换SignChar前面的所有字符 。如果没有找到相应的字符就返回原串
function ReplaceMiddle(Str,RepStr:string;SignChar:char):string; //用RepStr替换第一个和最后一个SignChar 之间的所有字符
function ReplaceRight(Str,RepStr:string;SignChar:char):string;//用RepStr替换SignChar后面的所有字符.如果没有找到相应的字符就返回原串
function ReplaceBoth(Str,RepStr:string;SignChar:char):string;//用RepStr替换左边第一个前面和右边第一个后面的所有串
//字符串的替换--用SpecifiedChar代替SignChar位置前、后、之间的SignChar
function ReplaceLeftChar(Str:string;RepChar,SignChar:char):string;//用RepChar替换从左边到第一个不是SignChar之间的所有SignChar字符
function ReplaceMiddleChar(Str:string;RepChar,SignChar:char):string;//用RepChar替换从左边到第一个不是SignChar开始 到 从右边开始到第一个不是SignChar之间的所有SignChar
function ReplaceRightChar(Str:string;RepChar,SignChar:char):string;//用RepChar替换从最右边到第一个不是SignChar之间的所有SignChar字符
function ReplaceBothChar(Str:string;RepChar,SignChar:char):string;//用RepChar替换从左边到第一个不是SignChar之间以及从最右边到第一个不是SignChar之间的所有SignChar字符
function ReplaceAllChar(Str:string;RepChar,SignChar:char):string;//用RepChar代替串中所有的SignChar
//字符串的替换--用RepStr代替SignStr
function ReplaceFirstStr(Str,RepStr,SignStr:string;CaseSensitive:boolean):string;//用RepStr替换第一个SignStr
function ReplaceLastStr(Str,RepStr,SignStr:string;CaseSensitive:boolean):string;//用RepStr替换最后一个SignStr
function ReplaceBothStr(Str,RepStr,SignStr:string;CaseSensitive:boolean):string;//用RepStr替换最前面和最后面一个SignStr
function ReplaceAllStr(Str,RepStr,SignStr:string;CaseSensitive:boolean;var RepCount:integer):string;//用RepStr替换所有的SignStr
//字符串的删除
function TrimLeftChar(Str:string;DelChar:char):string;//删除Str中左边的指定字符
function TrimRightChar(Str:string;DelChar:char):string; //删除Str中右边的指定字符
function TrimBoth(Str:string;DelChar:char):string;//删除Str中左右边的指定字符
function TrimAll(Str:String;DelChar:char):string;//删除Str中所有的指定字符
function TrimMiddle(Str:string;DelChar:char):string;//删除中间的指定字符(从左边和右边第一个不是指定字符之间)
//获取字符串的子串
//字符串获取-获取某一字符的左、右、中间的字符串
function GetLeftStr(Str:string;SpecifiedChar:char):string;//获取字符串某一特定字符(第一个)左边的所有字符(不含该特定字符)
function GetMiddleStr(Str:string;SpecifiedChar:Char):string;//获取字符串某一特定字符(第一个和最后一个)之间的所有字符(不含该特定字符)
function GetRightStr(Str:string;SpecifiedChar:char):string;//获取字符串某一特定字符(第一个)右边的所有字符(不含该特定字符)
//字符串获取-获取某一字符串(该字符串由相同的字符组成)中间的字符串
function GetMiddleString(Str:string;SpecifiedChar:Char):string;
//字符串获取-获取两个字符串相同的部分
function GetLeftSameStr(Str1,Str2:string):string; //获取两字符串左边相同的部分
function GetRightSameStr(Str1,Str2:string):string; //获取两字符串右边相同的部分
//字符串获取-获取两个字符串不同的部分
procedure GetRightDiverse(var Str1,Str2:string); //获取两个字符串相同部分的右边不同部分
procedure GetLeftDiverse(var Str1,Str2:string); //获取两个字符串相同部分左边不同部分
//字符串的比较
function FindDiverseLeftPos(Str1,Str2:string):integer;//从左至右查找在字符串中不同的位置。空格忽略
function FindDiverseRightPos(Str1,Str2:string):integer;//从右至左查找在字符串中不同的位置。 空格忽略
//字符串的插入
function RepeatChar(ReChar:char;Count:integer):string; //将某一字符重复Count次;
implementation
procedure EStrProcess(ExceptType:TStrException;Value,ErrorInfo:string);
begin
raise ExceptType.Create(Value+ErrorInfo);;
end;
////////////////////////////////////////////////////////////////////////////////
{
数制转换
}
function HexToInt(Hex:String):integer; //将一个十六进制的值转换成整型 参数说明:Hex:被转换的十六进制值
var
HexDigital:Set of char;
i:integer;
Digital:string;
begin
HexDigital:=['1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','a','b','c','d','e','f'];
if Length(Hex)=0 then EStrProcess(EHexToIntError,Hex,EmptyHex);
for i:=1 to Length(Hex) do begin
Digital:=Copy(Hex,i,1);
if (i=1)and(digital='$')then Continue;
if not(StrToChar(Digital) in HexDigital) then EStrProcess(EHexToIntError,Hex,InvalidHex);
end;
Digital:=Copy(Hex,1,1);
if Digital<>'$' then Hex:='$'+Hex;
Result:=StrToInt(Hex);
end;
function IntToBin(Int:LongInt;Size:Integer):String; //将一个十进制整型转换成二进制值 参数说明:Int:被转换的整型值 Size:转换后的宽度:4位 8位 或更大
var
i:Integer;
begin
if Size<1 then EStrProcess(EIntToBinError,IntToStr(Size),InvalidSize);
for i:=Size downto 1 do begin
if Int and (1 shl (Size-i))<>0 then Result:='1'+Result
else Result:='0'+Result;
end;
end;
function BinToInt(Bin: string): LongInt;//将一个十进制整型转换成二进制值 参数说明:Bin:被转换的二进制值串
var
i,Size: Integer;
Bit:string;
begin
Result:=0;
Size:=Length(Bin);
if Size=0 then EStrProcess(EBinToIntError,Bin,EmptyBinary);
for i:=Size downto 1 do begin
Bit:= Copy(Bin,i,1);
if (Bit<>'1') and (Bit<>'0') then EStrProcess(EBinToIntError,Bin,InvalidBinary);
if Bit='1' then Result:=Result+(1 shl (Size-i));
end;
end;
function BinToHex(Bin:string;Size:integer):string; //将二进制转换成十六进制 Bin:被转换的二进制值 Size:转换成十六进制的宽度
begin
Result:=IntToHex(BinToInt(Bin),Size);
end;
function HexToBin(Hex:string;Size:integer):string; //将十六进制转换成二进制 Bin:被转换的十六进制值 Size:转换成二进制的宽度
begin
Result:=IntToBin(HexToInt(Hex),Size);
end;
/////////////////////////////////////////////////////////////////////////////////
{
字符处理
}
//字符种类
function IsNumber(Ch: char): boolean; //判断一个字符是否是一个数字
begin
Result:=((Ch>='0')and(Ch<='9'));
end;
function IsLetter(Ch:char):boolean; //判断一个字符是否是一个字母
begin
Result:=((Ch>='a')and(Ch<='z'))or((Ch>='A')and(Ch<='Z'));
end;
function IsSign(Ch:char):boolean;//判断一个字符是否是一些符号' ','\' '>'等。
type
TSign=set of Char;
var
Sign:TSign;
begin
Sign:=[' ','~','`','!','@','#','$','%','^','&','*','(',')','-','_','=','+','|','\','[',']','{','}',':',';','''','"','<','>',',','.','?','/'];
Result:=Ch in Sign;
end;
function IsPrint(Ch:char):boolean;//判断一个字符是否是可显示出来的字符
begin
Result:=IsLetter(Ch) or IsNumber(Ch) or IsSign(Ch);
end;
//////////////////////////////////////////////////////////////////////////////////
{
字符串处理
}
//串转换/转化
function StrToChar(Str:string):Char; //将单个字符的串转换成字符 参数说明:Str:被转换的串
begin
if Length(Str)=0 then EStrProcess(EStrToCharError,Str,EmptyStr);
if Length(Str)>1 then EStrProcess(EStrToCharError,Str,Toolong);
Result:=Str[1];
end;
function IntToStrPad0(Digital,Size:integer;Before:boolean):string;//将一个整型数转换成一个在前/后添加若干个0的串
var
Len:integer;
begin
Result:=IntToStr(Digital);
Len:=Length(Result);
while Len<Size do begin
if Before then Result:='0'+Result
else Result:=Result+'0';
Len:=Length(Result);
end;
end;
//字符数目
function GetMaxWordNumber(var MaxLineID:integer;List:TStringList):integer; //获取最大行的行号及字母数。
var
i:integer;
Len:integer;
begin
Result:=0;
if List.Count=0 then Exit;
for i:=0 to List.Count-1 do begin
Len:=Length(List.strings[i]);
if Len>=Result then begin
Result:=Len;
MaxLineID:=i;
end;
end;
end;
function GetChineseWordNumber(Str:string):integer; //获取一个串的汉字的个数
var
i:integer;
CurrentChar:char;
CurrentStr:string;
begin
Result:=0;
if Length(Str)=0 then Exit;
for i:=1 to Length(Str) do begin
CurrentStr:=Copy(Str,i,1);
CurrentChar:=CurrentStr[1];
if Ord(CurrentChar)>=127 then Result:=Result+1;
end;
Result:=Result div 2;
end;
function GetEnglishWordNumber(Str:string):integer; //获取英文字母的个数
begin
Result:=Length(Str)-2*GetChineseWordNumber(Str);
end;
//字符输出空间 (图形模式)
function GetTextOutWidth(Canvas:TCanvas;Str:String;WordSpace:integer):integer; //获取一个串输出时的宽度(Pixel)
var
i:integer;
CurrentStr:string;
CurrentChar:Char;
begin
i:=1;
Result:=0;
if Length(Str)=0 then Exit;
while i<=Length(Str) do begin
CurrentStr:=Copy(Str,i,1);
CurrentChar:=CurrentStr[1];
if Ord(CurrentChar)>=127 then begin
CurrentStr:=Copy(Str,i,2);
inc(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -