菜单

4166m金沙Delphi中常用字符串处理函数,Delphi分割字符串的函数

2020年2月26日 - 4166am金沙下载

博主一向认为Delphi中从不分割字符串的函数,早前曾经本人写过贰个SplitStrings,一贯使用到现在,但在叁回阅读Delphi援助时,无意中在Classes单元中窥见Delphi自身就有分割字符串的函数–ExtractStrings,何况功能还不弱,分割的同有的时候候还能去空字符串和去空白(能够自定义)。反正比小编写的好啊!^_^

    
Delphi中-ExtractStrings,分割的还要还足以去空字符串和去空白(能够自定义)。

Unit
Classes

Unit
Classes

1.copy(str,pos,num卡塔尔国 从str字符串的pos处开端,截取num个字符的串再次回到.
假设str为’abcdef’,copy(str,3,2)=’cd’,copy(str,4,10)=’def’ 
2.concat(str1,str2{,strn}卡塔尔国 把各自变量连接起来,重回连接后的字符串(长度无法超过255卡塔尔 
3.length(str卡塔尔       重回str的字符个数,即其长度. 
4.pos(obj,target卡塔尔国   在target字符串中寻找第三个冒出obj的率先个字符地方,要是找不到,重返0. 
5.AnsiStrLastChar(‘你好’卡塔尔(قطر‎结果是“好”。如若有半个汉字现身,重返那半个汉字。二者字符串长度分别为2和1。 
6.CompareStr  – 区分朗朗上口写 
7.CompareText – 不区分轻重缓急写 
8.StringReplace(const S, OldPattern, NewPattern: string;Flags: TReplaceFlags): string;
字符串替换函数,须求引用SysUtils单元
rfReplaceAll:全部替换 
rfIgnoreCase:忽视大小写
利用方式Lg:
  str:='01231142211 :655767';//需要把:替换成—-
s:=StringReplace(str,’:’,’—-‘,[rfReplaceAll]);
For Example:

Syntax

Syntax

var
aStr: String;
begin
aStr := ‘This is a book, not a pen!’;
ShowMessage(StringReplace (aStr, ‘a’, ‘two’, []));   //This is two book, not a pen!只替换了第三个符合的字
ShowMessage(StringReplace (aStr, ‘a’, ‘two’, [rfReplaceAll]));
 //This is two book, not two pen!替换了装有符合的字
aStr := ‘This is a book, not A pen!’;
ShowMessage(StringReplace (aStr, ‘a’, ‘two’, [rfReplaceAll]));   //This is two book, not A pen!只替换了相符的字(小写a卡塔尔(قطر‎
ShowMessage(StringReplace (aStr, ‘a’, ‘two’, [rfReplaceAll, rfIgnoreCase]));   //This is two book, not two pen!不管大小写替换了具有相符的字
end;

ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet;
Content: PAnsiChar; Strings: TStrings): Integer;

ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet;
Content: PAnsiChar; Strings: TStrings): Integer;  

9.delete 是删除一个 字符串中的 某部分字符
用法是 delete(str,//被删除的字符串 
              index,//从第多少个字符起初删除
              count //删除多少个
              );
Delete(S, 2, 2卡塔尔; 便是从S中的第4个初阶删除,删除2个字符即2、3.所以结果是145. 
////////////////////////////////////////////////////////
LEFTSTR, MIDSTR, RIGHTSTR的介绍
那多少个函数都含有在StrUtils中,所以需求uses StrUtils; 
倘使字符串是 Dstr := ’Delphi is the BEST’, 那么 
LeftStr(Dstr, 5) := ’Delph’ 
MidStr(Dstr, 6, 7) := ’i is th’ 
RightStr(Dstr, 6) := ’e BEST’

Description < by specified null-terminated the of fill to
ExtractStrings>
< is character quote if quoted in appear can characters that (Note
quote. end final until inside when ignored are Separators separators. as
treated always double) or (single and characters, newline returns,
Carriage substrings. separating delimiters, used set> < beginning
at occur they Content parsing be> < into parse> < already
strings any so ExtractStrings, cleared not The added. all which><
Strings added number returns>

Description < by specified null-terminated the of fill to
ExtractStrings>
< is character quote if quoted in appear can characters that (Note
quote. end final until inside when ignored are Separators separators. as
treated always double) or (single and characters, newline returns,
Carriage substrings. separating delimiters, used set> < beginning
at occur they Content parsing be> < into parse> < already
strings any so ExtractStrings, cleared not The added. all which><
Strings added number returns>

 
 
8.{判别字符是或不是是数字} 
function IsDigit(ch: char): boolean; 
begin 
  Result := ch in [‘0’..’9′]; 
end; 
 
9、{剖断字符是不是是大写字符} 
function IsUpper(ch: char): boolean; 
begin 
  Result := ch in [‘A’..’Z’]; 
end; 
10、{判别字符是不是是小写字符} 
function IsLower(ch: char): boolean; 
begin 
  Result := ch in [‘a’..’z’]; 
end; 
11、{调换为大写字符} 
function ToUpper(ch: char): char; 
begin 
  Result := chr(ord(ch) and $DF); 
end; 
12、{转换为小写字符} 
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; 
//////////////////////////////////////////////////////////// 
13.{重返三个子字符串之间字符的个数} 
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; 
14.{更加高速的字符查询,快十分三} 
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; 
///////////////////////////// 
15.替换字符串中子串的函数,他得以从字符串中寻觅内定子串,并替换为另一子串。 
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 ( string ; Var S:string ) : string ; < /span>
  Var 
  F : Word ; 
begin 
  F := POS (Src,S) ; 
  if F=0 then 
    Before := S 
   else 
    Before := COPY(S,1,F-1) ; 
end ; 
////////////////////////////////// 
领到字符串中钦赐子字符串后的字符串 
Function After ( string ; Var S:string ) : string ; < /span>
  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.38State of Qatar 为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. 

ExtractStrings does not add empty strings to the list.

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图