A String klasse for delphi

En streng klasse wich incapsulates flere strykere functionsI har gjort dette lille strengen klassen basere meg på QStrings og FastStrings, og dermed denne klassen er rask og håndterer flere strengfunksjoner. BTW for å samle og bruke denne klassen du trenger FastStrings (du kan få en kopi på Peter Morris Hjemmeside) .Why lage en streng klasse? godt selv om denne klassen mangler operatør overbelastning jeg trenger det, og tenkte noen migth nytte av it.UPDATE: Lagt case sensitive starts og EndsWithFIXED: Bugs i Venstre, Høyre, Faster Wordcount (kopiert fra QStrings) enhet
IMLCommon; interfaceuses
SysUtils, kurs; skriv
TCharSet = sett med
Char; TString = klasse privat
Buffer: AnsiString; FWordSeparators: TCharset; -funksjonen
GetLength: Integer; -funksjonen
GetRefCount: Integer; -funksjonen
GetCharacter ( konst
indeks: Integer): Char; -funksjonen
GetWordSeparators: TCharSet; -funksjonen
GetAsPChar: PChar; -funksjonen
GetAsInteger: Integer; -funksjonen
GetAsWord: Word; -funksjonen
GetWordCount: Integer; prosedyre
SetLength ( konst
Verdi: Integer); prosedyre
SetCharacter ( konst
indeks: Integer; konst
Verdi: Char); prosedyre
SetWordSeparators ( konst
Verdi: TCharSet); prosedyre
SetAsPChar ( konst
Verdi: PChar); prosedyre
SetAsInteger ( konst
Verdi: Integer); prosedyre
SetAsWord ( konst
Verdi: Word); beskyttet funksjon
FindEx ( Const
treng: String
; konst
CaseSensitive: Boolean = True; const
StartPos: Integer = 1; konst
ForwardSearch: Boolean = True): Integer; -funksjonen
InternalInteger ( Var
Variabel: Integer; konst
HighBound, nedre: Integer): Boolean; -funksjonen
InternalWord ( Const
indeks: Integer): String
; offentlig funksjon
Venstre (Count: Integer): String
; -funksjonen
Rigth (Count: Integer): String
; -funksjonen
Mid ( konst
AStart, acount: Integer): String
; -funksjonen
store bokstaver: String
; -funksjonen
små bokstaver: String
; -funksjonen
IsEmpty: Boolean; -funksjonen
starts ( konst
AString: String
; Const
CaseSensitive: Boolean = False): Boolean; -funksjonen
EndsWith ( konst
AString: String
; konst
CaseSensitive: Boolean = False): Boolean; -funksjonen
Finn ( Const
treng: String
; const
StartPos: Integer = 1; konst
CaseSensitive: Boolean = sann): Integer; -funksjonen
FindRev ( Const
treng: String
; const
StartPos: Integer = 1; konst
CaseSensitive: Boolean = True): Integer; -funksjonen
Inneholder ( konst
treng: String
; konst
CaseSensitive: Boolean = True): Boolean; -funksjonen
ISNUMBER: Boolean; -funksjonen
Append ( konst
Verdi: String
): String
; -funksjonen
foran ( konst
Verdi: String
): String
; -funksjonen
Fjern ( konst
Index, Lengde: Integer): String
; prosedyre
avkorte ( konst
NewLength: Integer); prosedyre
Fill ( konst
achar: Char; NewLength: Integer = 1); prosedyre
Sett ( konst
indeks: Integer; konst
AString: String
); eiendom
Innhold: String Les
Buffer Skriv
Buffer; eiendom
RefCount: Integer Les
GetRefCount; eiendom
tegn [ Const Index
: Integer]: Char Les
GetCharacter skrive
SetCharacter; standard
; eiendom
Words [ Const Index
: Integer]: String lese
InternalWord; eiendom
Wordcount: Integer Les
GetWordCount; eiendom
Lengde: Integer Les
GetLength skrive
SetLength; eiendoms
WordSeparators: TCharSet Les
GetWordSeparators skrive
SetWordSeparators; eiendom
AsPChar: PChar Les
GetAsPChar skrive
SetAsPChar; eiendom
AsInteger: Integer Les
GetAsInteger skrive
SetAsInteger; eiendom
AsWord: Word Les
GetAsWord skrive
SetAsWord; slutten
; implementationuses
{JclStrings,}
FastStrings; {TString}
-funksjonen
TString.EndsWith ( konst
AString: String
; konst
CaseSensitive: Boolean): Boolean; begynne hvis
CaseSensitive da
Resultat: = AnsiSameStr (AString , Rigth (System.Length (AString))) annet
Resultat: = AnsiSameText (AString, Rigth (System.Length (AString))); slutten
; -funksjonen
TString.FindEx ( konst
treng: String
; konst
CaseSensitive: Boolean; const
StartPos: Integer; konst
ForwardSearch: Boolean): Integer; begynner
Resultat: = SmartPos (delstreng, buffer, CaseSensitive, StartPos, ForwardSearch); slutten
; prosedyre
TString.Fill ( konst
achar: Char; NewLength: Integer); begynne hvis plakater (NewLength < 0) da begynne hvis
Lengde > 0 deretter
FillChar (Buffer [1], Lengde, ord (achar)) annet
FillChar (Buffer [1], en, ord (achar)); end annet begynne
SetLength (NewLength); FillChar (Buffer [1], Lengde, ord (achar)); slutten
; slutten
; -funksjonen
TString.Find ( konst
treng: String
; konst
StartPos: Integer; konst
CaseSensitive: Boolean): Integer; begynner
Resultat: = FindEx (delstreng, CaseSensitive, StartPos); slutten
; -funksjonen
TString.FindRev ( konst
treng: String
; const
StartPos: Integer; konst
CaseSensitive: Boolean): Integer; < b> Var
RealStartPos: Integer; begynne hvis
StartPos < 0 da
RealStartPos: = Lengde annet
RealStartPos: = StartPos; Resultat: = FindEx (delstreng, CaseSensitive, RealStartPos, false); slutten
; -funksjonen
TString.GetAsPChar: PChar; begynner
Resultat: = PChar (buffer); slutten
; -funksjonen
TString.GetCharacter ( konst
indeks: Integer): Char; begynne hvis
IsEmpty eller plakater ( Indeks > lengde) da
Resultat: = # 0 annet
Resultat: = Buffer [Indeks]; slutten
; -funksjonen
TString.GetLength : Integer; Var
P: Pointer; begynner
Resultat: = 0; hvis
Pointer (buffer) < > nil deretter begynne
P: = Pointer (heltall (Pointer (buffer)) - 4); Resultat: = Integer (P ^) og plakater ( ikke anbefale $ 80 millioner shr
1); slutten
; slutten
; -funksjonen
TString.IsEmpty: Boolean; begynner
Resultat: = (Lengde = 0); ende
; -funksjonen
TString.Left (Count: Integer): String
; begynne hvis
Count > Lengde da
Resultat: = Buffer annet begynne
System.SetLength (Resultat, grev); Move (Buffer [1], Resultat [1], Count); slutten
; slutten
; -funksjonen
TString.LowerCase: String
; begynner
Resultat: = SysUtils.LowerCase (Buffer ); slutten
; -funksjonen
TString.Mid ( konst
AStart, acount: Integer): String
; begynne
resultat: = Kopier (buffer, AStart, acount); slutten
; -funksjonen
TString.Rigth (Count: Integer): String
; begynne hvis
Count > Lengde da
Resultat: = '' annet begynne
System.SetLength (Resultat, grev); Move (Buffer [lengde - (Count-1)] Resultat [1], Count); slutten
; slutten
; prosedyre
TString.SetAsPChar ( konst
Verdi: PChar); begynner
Buffer: = Verdi; slutten
; prosedyre
TString.SetCharacter ( konst
indeks: Integer; konst
Verdi: Char); begynne hvis ikke
IsEmpty så hvis plakater (Index < lengde) og plakater (Value < > GetCharacter (Index)) deretter
Buffer [Indeks]: = verdi; slutten
; prosedyre
TString.SetLength ( konst
Verdi: Integer); begynne
System.SetLength (buffer, verdi); ende
; -funksjonen
TString.StartsWith ( konst
AString: String
; konst
CaseSensitive: Boolean): Boolean; begynne hvis
CaseSensitive da
Resultat: = AnsiSameStr (AString, Venstre (System.Length (AString))) annet
Resultat: = AnsiSameText (AString, Venstre (System.Length ( AString))); slutten
; prosedyre
TString.Truncate ( konst
NewLength: Integer); begynner
Lengde: = NewLength; end
; -funksjonen
TString.Uppercase: String
; begynner
Resultat: = SysUtils.UpperCase (buffer); slutten
; funksjons
TString.Contains ( konst
treng: String
; konst
CaseSensitive: Boolean): Boolean; begynner
Resultat: = Finn (delstreng, 1, CaseSensitive) > 0; slutten
; prosedyre
TString.Insert ( konst
indeks: Integer; konst
AString: String
); begynne
System.Insert (AString, buffer, Index); slutten
; -funksjonen
TString.Append ( konst
Verdi: String
): String
; begynne
Sett (Lengde, verdi); Resultat: = Buffer; slutten
; -funksjonen
TString.Prepend ( konst
Verdi: String
): String
; begynne
Sett (1, verdi); Resultat: = Buffer; slutten
; -funksjonen
TString.Remove ( konst
Index, Lengde: Integer): String
; begynne
Resultat: = Buffer; Slett (Resultat, Index, lengde); slutten
; -funksjonen
TString.IsNumber: Boolean; Var
i: Integer; begynner
Resultat: = True; for
i: = 1 til
Lengde ikke hvis ikke anbefale (GetCharacter (i) i product: [ '0' .. '9', '+', '-',]) da begynne
Resultat: = False; '.' Gå; slutten
; slutten
; -funksjonen
TString.InternalInteger ( Var
Variabel: Integer; konst
HighBound, nedre: Integer ): Boolean; Var
CODE: Integer; begynner
Resultat: = False; hvis
IsEmpty eller ikke anbefale ISNUMBER da
Exit; Val (buffer, Variable, errorcode); Resultat: = (errorcode = 0) og plakater ((Variable > = nedre) og plakater (Variable < = HighBound)); slutten
; funksjon
TString.GetAsInteger: Integer; begynne
InternalInteger (Resultat, High (heltall), Low (heltall)); slutten
; prosedyre
TString.SetAsInteger ( konst
Verdi: Integer); begynne
Str (verdi, Buffer); slutten
; -funksjonen
TString.GetAsWord: Word; Var
Tmp: Integer; begynne hvis
InternalInteger (TMP, 0, 65535) da
Resultat: = Tmp annet
Resultat: = 0; end
; prosedyre
TString.SetAsWord ( konst
Verdi: Word); begynne
Str (verdi, Buffer); slutten
; funksjons
TString.GetWordSeparators: TCharSet; begynner
Resultat: = FWordSeparators; slutten
; prosedyre
TString.SetWordSeparators ( konst
Verdi: TCharSet); begynne hvis
FWordSeparators < > Verdi da
FWordSeparators: = verdi; slutten
; -funksjonen
TString.InternalWord ( konst
indeks: Integer): String
; Var
I, J, N: Integer; L: Long; P: PChar; A: boolsk; begynne hvis plakater (Index < = 0) da
Exit; L: = Lengde; P: = Pointer (buffer); A: = false; N: = 1; for
I: = 1 for bedriften L ikke begynne hvis ikke anbefale (P ^ i
WordSeparators) da begynne hvis ikke
A da begynne hvis
N = Index da begynne
N: = L + 1; Inc (P); for
J: = I + 1 for bedriften L ikke begynne hvis
P ^ i
WordSeparators da begynne
N: = J; Gå i stykker; slutten
; Inc (P); slutten
; Resultat: = Kopier (buffer, I, N-I); Gå; slutten
; A: = true; Inc (N); slutten
; end else if
A da
A: = False; Inc (P); slutten
; Resultat: = ''; slutten
; -funksjonen
TString.GetWordCount: Integer; funksjons
CountOfWords ( konst
S: string
; const
Skilletegn: TCharSet): integer; asm
PUSH EBX TEST EAX, EAX JE@@q0 MOV ECX, [EAX-4] MOV EBX, EAX desember ECX JS@@QZ PUSH ESI XOR EAX, EAX JMP@@LP2@@iw: INC EAX desember ECX JS@@ex@@LP1: MOVZX ESI, BYTE PTR [EBX + ECX] BT [EDX], ESI JC@@nx desember ECX JNS@@lp1@@ex: POP ESI POP EBX RET@@LP2: MOVZX ESI, BYTE PTR [EBX + ECX] BT [EDX], ESI JNC@@iw@@nx: desember ECX JNS@@LP2 POP ESI POP EBX RET@@QZ: XOR EAX, EAX@@q0: POP EBX < b> slutten
; begynne hvis
IsEmpty da begynne
Resultat: = 0; Gå; slutten
; Resultat: = CountOfWords (buffer, FWordSeparators); slutten
; -funksjonen
TString.GetRefCount: Integer; Var
P: Pointer; begynner
Resultat : = 0; hvis
Pointer (buffer) < > nil deretter begynne
P: = Pointer (heltall (Pointer (buffer)) - 8); Resultat: = Integer (P ^); slutten
; slutten
;. slutten