Une classe string pour delphi


Une classe string qui incapsulates plusieurs fonctions de chaînes de caractères
j'ai fait cette petite classe string en me basant sur les QStrings et FastStrings, ainsi cette classe est rapide et gère plusieurs fonctions de chaînes de caractères. BTW, afin de compiler et d'utiliser cette classe, vous en aurez besoin FastStrings (vous pouvez en obtenir une copie à Peter Morris page d'Accueil).
Pourquoi faire une classe string? ainsi, bien que cette catégorie ne présente pas de surcharge d'opérateur j'en ai besoin, et de la pensée de quelqu'un migth bénéficier de celui-ci.
mise à JOUR: Ajout de la casse StartsWith et EndsWith
CORRECTION : Bugs dans de Gauche, de Droite, plus Vite nombre de mots (copié à partir de QStrings)

unité IMLCommon
interface

& nbsp & nbsp
SysUtils, Les Classes
type
& nbsp & nbsp
TCharSet = Set Char
& nbsp & nbsp TString = de la classe
& nbsp & nbsp privé
& ! & ! & ! & nbsp
de la mémoire Tampon: AnsiString
& ! & ! & ! & nbsp FWordSeparators: TCharset
& ! & ! & ! & nbsp fonction GetLength: Integer
& ! & ! & ! & nbsp fonction GetRefCount: Integer
& ! & ! & ! & nbsp fonction GetCharacter(const Index: Integer): Char
& ! & ! & ! & nbsp fonction GetWordSeparators: TCharSet
& ! & ! & ! & nbsp fonction GetAsPChar: PChar
& ! & ! & ! & nbsp fonction GetAsInteger: Integer
& ! & ! & ! & nbsp fonction GetAsWord: Mot
& ! & ! & ! & nbsp fonction GetWordCount: Integer
& ! & ! & ! & nbsp procédure SetLength(const Valeur: Entier)
& ! & ! & ! & nbsp procédure SetCharacter(const Indice: Entier const Valeur: Char)
& ! & ! & ! & nbsp procédure SetWordSeparators(const Valeur: TCharSet)
& ! & ! & ! & nbsp procédure SetAsPChar(const Valeur: PChar)
& ! & ! & ! & nbsp procédure SetAsInteger(const Valeur: Entier)
& ! & ! & ! & nbsp procédure SetAsWord(const Valeur: Word)
& nbsp & nbsp protected
& ! & ! & ! & nbsp fonction
FindEx(Const sous-Chaîne de caractères: String const à la Casse: Boolean = True
& ! & ! & ! & ! & ! & nbsp const StartPos: Integer = 1 const ForwardSearch: Boolean = True): Integer
& ! & ! & ! & nbsp fonction InternalInteger(var Variable: Integer const HighBound, LowBound: Integer): Boolean
& ! & ! & ! & nbsp fonction InternalWord(Const Index: Integer): String
& nbsp & nbsp public
& ! & ! & ! & nbsp fonction
Gauche(Count: Integer): String
& ! & ! & ! & nbsp fonction Droite(Count: Integer): String
& ! & ! & ! & nbsp fonction Mid(const AStart, ACount: Integer): String
& ! & ! & ! & nbsp fonction en Majuscules: String
& ! & ! & ! & nbsp fonction en Minuscules: String
& ! & ! & ! & nbsp fonction IsEmpty: Boolean
& ! & ! & ! & nbsp fonction StartsWith(const AString:String
& ! & ! & ! & ! & ! & nbsp Const à la Casse: Boolean = False): Boolean
& ! & ! & ! & nbsp fonction EndsWith(const AString: String
& ! & ! & ! & ! & ! & nbsp const à la Casse: Boolean = False): Boolean
& ! & ! & ! & nbsp fonction Find(Const sous-Chaîne de caractères: String const StartPos: Entier = 1
& ! & ! & ! & ! & ! & nbsp const à la Casse: Boolean = True): Entier
& ! & ! & ! & nbsp fonction FindRev(Const sous-Chaîne de caractères: String const StartPos: Entier = -1
& ! & ! & ! & ! & ! & nbsp const à la Casse: Boolean = True): Entier
& ! & ! & ! & nbsp fonction (const sous-Chaîne de caractères: String
& ! & ! & ! & ! & ! & nbsp const à la Casse: Boolean = True): Boolean
& ! & ! & ! & nbsp fonction IsNumber: Boolean
& ! & ! & ! & nbsp fonction Append(const Valeur: String): String
& ! & ! & ! & nbsp fonction Prepend(const Valeur: String): String
& ! & ! & ! & nbsp fonction Supprimer(const Index, Longueur: Entier): String
& ! & ! & ! & nbsp procédure Truncate(const Nouvellelongueur: Integer)
& ! & ! & ! & nbsp procédure de Remplissage(const AChar: Char Nouvellelongueur: Entier = -1)
& ! & ! & ! & nbsp procédure Insert(const Index: Integer const AString: String)
& ! & ! & ! & nbsp propriétés Contenu: la Chaîne de Lecture Tampon Écrire Tampon
& ! & ! & ! & nbsp propriétés RefCount:Entier lire GetRefCount
& ! & ! & ! & nbsp propriétés Caractères[Const Index: Integer]: Char lire GetCharacter écrire SetCharacter par défaut
& ! & ! & ! & nbsp propriétés Mots[Const Index: Integer]: la Chaîne de lecture InternalWord
& ! & ! & ! & nbsp propriétés WordCount: Entier lire GetWordCount
& ! & ! & ! & nbsp propriétés Longueur: Integer lire GetLength écrire SetLength
& ! & ! & ! & nbsp propriétés WordSeparators: TCharSet lire GetWordSeparators écrire SetWordSeparators
& ! & ! & ! & nbsp propriétés AsPChar: PChar lire GetAsPChar écrire SetAsPChar
& ! & ! & ! & nbsp propriétés AsInteger: Entier lire GetAsInteger écrire SetAsInteger
& ! & ! & ! & nbsp propriétés al'épée: Mot lire GetAsWord écrire SetAsWord
& nbsp & nbsp fin

application

& nbsp & nbsp
{JclStrings,} FastStrings
{ TString }
fonction TString.EndsWith(const AString: String
& nbsp & nbsp const à la Casse: Boolean): Boolean
begin
& nbsp & nbsp si
à la Casse puis
& ! & ! & ! & nbsp
Result := AnsiSameStr(AString, Droite(le Système.Longueur(AString)))
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := AnsiSameText(AString,Droite(le Système.Longueur(AString)))
fin
fonction TString.FindEx(const sous-Chaîne de caractères: String
& nbsp & nbsp const à la Casse: Boolean const StartPos: Integer
& nbsp & nbsp const ForwardSearch: Boolean): Integer
begin
& nbsp & nbsp
Result := SmartPos(sous-Chaîne, Tampon, à la Casse, StartPos, ForwardSearch)
fin
procédure TString.De remplissage(const AChar: Char Nouvellelongueur: Entier)
begin
& nbsp & nbsp si
(Nouvellelongueur < 0) puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si
Longueur > 0
& ! & ! & ! & ! & ! & nbsp
FillChar(Tampon[1], la Longueur, l'ord(AChar))
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp
FillChar(Tampon[1], 1, ord(AChar))
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
SetLength(Nouvellelongueur)
& ! & ! & ! & nbsp FillChar(Tampon[1], la Longueur, l'ord(AChar))
& nbsp & nbsp fin
fin
fonction TString.Trouver(const sous-Chaîne de caractères: String const StartPos: Integer
& nbsp & nbsp const à la Casse: Boolean): Integer
begin
& nbsp & nbsp
Result := FindEx(sous-Chaîne, à la Casse, StartPos)
fin
fonction TString.FindRev(const sous-Chaîne de caractères: String const StartPos: Integer
& nbsp & nbsp const à la Casse: Boolean): Integer
var
& nbsp & nbsp
RealStartPos: Entier
begin
& nbsp & nbsp si
StartPos < 0 RealStartPos := Length else RealStartPos := StartPos
& nbsp & nbsp Résultat := FindEx(sous-Chaîne, à la Casse, RealStartPos, False)
fin
fonction TString.GetAsPChar: PChar
begin
& nbsp & nbsp
Result := PChar(Tampon)
fin
fonction TString.GetCharacter(const Index: Integer): Char
begin
& nbsp & nbsp si
IsEmpty ou (Index > Longueur) puis
& ! & ! & ! & nbsp
Résultat := #0
& nbsp & nbsp
else
& ! & ! & ! & nbsp
Result := Tampon[Index]
fin
fonction TString.GetLength: Integer
var
& nbsp & nbsp
P: Pointeur
begin
& nbsp & nbsp
Result := 0
& nbsp & nbsp si Pointeur(Tampon) <> nil then
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
P : Pointeur = (Integer(Pointeur(Tampon)) - 4)
& ! & ! & ! & nbsp Résultat := Integer(P^) et (pas $80000000 rsh 1)
& nbsp & nbsp fin
fin
fonction TString.IsEmpty: Boolean
begin
& nbsp & nbsp
Result := (Longueur = 0)
fin
fonction TString.Gauche(Count: Integer): String
begin
& nbsp & nbsp si
Nombre > Longueur puis
& ! & ! & ! & nbsp
Result := Tampon
& nbsp & nbsp else begin
& ! & ! & ! & nbsp
Système.SetLength(Résultat, Nombre)
& ! & ! & ! & nbsp Déplacer(Tampon[1],Résultat[1],Comte)
& nbsp & nbsp fin
fin
fonction TString.Minuscule: String
begin
& nbsp & nbsp
Result := SysUtils.Minuscules( Tampon )
fin
fonction TString.Mi(const AStart, ACount: Entier): String
begin
& nbsp & nbsp
Result := Copy(Buffer, AStart, ACount)
fin
fonction TString.Droite(Count: Integer): String
begin
& nbsp & nbsp si
Nombre > Longueur puis
& ! & ! & ! & nbsp
Résultat := '
& nbsp & nbsp
else begin

& ! & ! & ! & nbsp
Système.SetLength(Résultat, Nombre)
& ! & ! & ! & nbsp Déplacer(Tampon[Longueur(Comte-1)],le Résultat[1],Comte)
& nbsp & nbsp fin
fin
procédure TString.SetAsPChar(const Valeur: PChar)
begin
& nbsp & nbsp
de la mémoire Tampon := Valeur
fin
procédure TString.SetCharacter(const Index: Integer const Valeur: Char)
begin
& nbsp & nbsp si pas
IsEmpty puis
& ! & ! & ! & nbsp si
(Index < Longueur) et (Valeur <> GetCharacter(Index)) puis
& ! & ! & ! & ! & ! & nbsp
Tampon[Index] := Valeur
fin
procédure TString.SetLength(const Valeur: Entier)
begin
& nbsp & nbsp
Système.SetLength( Tampon, Valeur )
fin
fonction TString.StartsWith(const AString: String
& nbsp & nbsp const à la Casse: Boolean): Boolean
begin
& nbsp & nbsp si
à la Casse puis
& ! & ! & ! & nbsp
Result := AnsiSameStr(AString, à Gauche(le Système.Longueur(AString)))
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := AnsiSameText(AString,à Gauche(le Système.Longueur(AString)))
fin
procédure TString.Truncate(const Nouvellelongueur: Entier)
begin
& nbsp & nbsp
Longueur := Nouvellelongueur
fin
fonction TString.Majuscules: String
begin
& nbsp & nbsp
Result := SysUtils.Majuscules( Tampon )
fin
fonction TString.Contient(const sous-Chaîne de caractères: String
& nbsp & nbsp const à la Casse: Boolean): Boolean
begin
& nbsp & nbsp
Result := Find(sous-Chaîne, 1, à la Casse) > 0
fin
procédure TString.Insert(const Index: Integer const AString: String)
begin
& nbsp & nbsp
Système.Insert(AString, Tampon, Index)
fin
fonction TString.Append(const Valeur: String): String
begin
& nbsp & nbsp
Insert(Longueur, Valeur)
& nbsp & nbsp Résultat := Tampon
fin
fonction TString.Prepend(const Valeur: String): String
begin
& nbsp & nbsp
Insert(1, Valeur)
& nbsp & nbsp Résultat := Tampon
fin
fonction TString.Supprimer(const Index, Longueur: Entier): String
begin
& nbsp & nbsp
Result := Tampon
& nbsp & nbsp Supprimer(Résultat, Index, Longueur)
fin
fonction TString.IsNumber: Boolean
var
& nbsp & nbsp
i: Integer
begin
& nbsp & nbsp
Result := True
& nbsp & nbsp pour j'ai := 1 de Longueur do
& ! & ! & ! & nbsp si pas
(GetCharacter(i) de ['0'..'9', ' ','-','.']) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp
Résultat := False
& ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & nbsp fin
fin
fonction TString.InternalInteger(var Variable: Integer const HighBound,
& nbsp & nbsp LowBound: Integer): Boolean
var
& nbsp & nbsp
ErrorCode: Integer
begin
& nbsp & nbsp
Résultat := False
& nbsp & nbsp si IsEmpty ou pas IsNumber Quitter
& nbsp & nbsp Val(Tampon, Variable, ErrorCode)
& nbsp & nbsp Result := (code d'erreur = 0) et ((Variable >= LowBound) et (Variable <= HighBound))
fin
fonction TString.GetAsInteger: Integer
begin
& nbsp & nbsp
InternalInteger(Résultat, Haute(Entier), Faible(Entier))
fin
procédure TString.SetAsInteger(const Valeur: Entier)
begin
& nbsp & nbsp
Str(Valeur, Tampon)
fin
fonction TString.GetAsWord: Mot
var
& nbsp & nbsp
Tmp: Integer
begin
& nbsp & nbsp si
InternalInteger(Tmp, 0, 65535) puis
& ! & ! & ! & nbsp
Result := Tmp
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := 0
fin
procédure TString.SetAsWord(const Valeur: Word)
begin
& nbsp & nbsp
Str(Valeur, Tampon)
fin
fonction TString.GetWordSeparators: TCharSet
begin
& nbsp & nbsp
Result := FWordSeparators
fin
procédure TString.SetWordSeparators(const Valeur: TCharSet)
begin
& nbsp & nbsp si
FWordSeparators <> Valeur puis
& ! & ! & ! & nbsp
FWordSeparators := Valeur
fin
fonction TString.InternalWord(const Index: Integer): String
var
& nbsp & nbsp
I,J,N: Integer
& nbsp & nbsp L: LongWord
& nbsp & nbsp P: PChar
& nbsp & nbsp Un: Boolean
begin
& nbsp & nbsp si
(Index <= 0) Quitter
& nbsp & nbsp L := Longueur
& nbsp & nbsp P : Pointeur = (Tampon)
& nbsp & nbsp A := False
& nbsp & nbsp N := 1
& nbsp & nbsp pour j'ai := 1 de L do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si pas
(P^ de WordSeparators) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si pas

& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp si
N = Index puis
& nbsp & nbsp & ! & ! & ! & ! & ! & nbsp commencer
& nbsp & nbsp nbsp & & ! & ! & ! & ! & ! & ! & nbsp
N := L 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Inc(P)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pour J := I 1 de L do
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si
P^ de WordSeparators
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
N := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Inc(P)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Résultat := Copy(Buffer,I,N-I)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp Un := True
& ! & ! & ! & ! & ! & ! & ! & nbsp Inc(N)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else if

& ! & ! & ! & ! & ! & nbsp
:= False
& ! & ! & ! & nbsp Inc(P)
& nbsp & nbsp fin
& nbsp & nbsp Résultat := '
fin
fonction TString.GetWordCount: Integer
& nbsp & nbsp fonction CountOfWords(const S: string const Délimiteurs: TCharSet): Entier
& nbsp & nbsp asm
& ! & ! & ! & ! & ! & ! & ! & nbsp
PUSH EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp TEST EAX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp EJ @@q0
& ! & ! & ! & ! & ! & ! & ! & nbsp MOV ECX,[EAX-4]
& ! & ! & ! & ! & ! & ! & ! & nbsp MOV EBX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JS @@qz
& ! & ! & ! & ! & ! & ! & ! & nbsp PUSH ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp XOR EAX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp JMP @@lp2
@@iw: INC EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JS @@ex
@@lp1: MOVZX ESI,BYTE PTR [EBX ECX]
& ! & ! & ! & ! & ! & ! & ! & nbsp BT [EDX],ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp JC @@nx
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JNS @@lp1
@@ex: POP ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp POP EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp RET
@@lp2: MOVZX ESI,BYTE PTR [EBX ECX]
& ! & ! & ! & ! & ! & ! & ! & nbsp BT [EDX],ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp CNP @@iw
@@nx: DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JNS @@lp2
& ! & ! & ! & ! & ! & ! & ! & nbsp POP ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp POP EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp RET
@@qz: XOR EAX,EAX
@@q0: POP EBX
& nbsp & nbsp
fin
begin
& nbsp & nbsp si
IsEmpty puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
Résultat := 0
& ! & ! & ! & nbsp Sortie
& nbsp & nbsp fin
& nbsp & nbsp Résultat := CountOfWords(Tampon, FWordSeparators)
fin
fonction TString.GetRefCount: Integer
var
& nbsp & nbsp
P: Pointeur
begin
& nbsp & nbsp
Result := 0
& nbsp & nbsp si Pointeur(Tampon) <> nil then
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
P : Pointeur = (Integer(Pointeur(Tampon)) - 8)
& ! & ! & ! & nbsp Résultat := Integer(P^)
& nbsp & nbsp fin
fin
fin.










Une classe string pour delphi


Une classe string pour delphi : Plusieurs milliers de conseils pour vous faciliter la vie.


Une classe string qui incapsulates plusieurs fonctions de chaînes de caracteres
j'ai fait cette petite classe string en me basant sur les QStrings et FastStrings, ainsi cette classe est rapide et gere plusieurs fonctions de chaînes de caracteres. BTW, afin de compiler et d'utiliser cette classe, vous en aurez besoin FastStrings (vous pouvez en obtenir une copie a Peter Morris page d'Accueil).
Pourquoi faire une classe string? ainsi, bien que cette categorie ne presente pas de surcharge d'operateur j'en ai besoin, et de la pensee de quelqu'un migth beneficier de celui-ci.
mise a JOUR: Ajout de la casse StartsWith et EndsWith
CORRECTION : Bugs dans de Gauche, de Droite, plus Vite nombre de mots (copie a partir de QStrings)

unite IMLCommon
interface

& nbsp & nbsp
SysUtils, Les Classes
type
& nbsp & nbsp
TCharSet = Set Char
& nbsp & nbsp TString = de la classe
& nbsp & nbsp prive
& ! & ! & ! & nbsp
de la memoire Tampon: AnsiString
& ! & ! & ! & nbsp FWordSeparators: TCharset
& ! & ! & ! & nbsp fonction GetLength: Integer
& ! & ! & ! & nbsp fonction GetRefCount: Integer
& ! & ! & ! & nbsp fonction GetCharacter(const Index: Integer): Char
& ! & ! & ! & nbsp fonction GetWordSeparators: TCharSet
& ! & ! & ! & nbsp fonction GetAsPChar: PChar
& ! & ! & ! & nbsp fonction GetAsInteger: Integer
& ! & ! & ! & nbsp fonction GetAsWord: Mot
& ! & ! & ! & nbsp fonction GetWordCount: Integer
& ! & ! & ! & nbsp procedure SetLength(const Valeur: Entier)
& ! & ! & ! & nbsp procedure SetCharacter(const Indice: Entier const Valeur: Char)
& ! & ! & ! & nbsp procedure SetWordSeparators(const Valeur: TCharSet)
& ! & ! & ! & nbsp procedure SetAsPChar(const Valeur: PChar)
& ! & ! & ! & nbsp procedure SetAsInteger(const Valeur: Entier)
& ! & ! & ! & nbsp procedure SetAsWord(const Valeur: Word)
& nbsp & nbsp protected
& ! & ! & ! & nbsp fonction
FindEx(Const sous-Chaîne de caracteres: String const a la Casse: Boolean = True
& ! & ! & ! & ! & ! & nbsp const StartPos: Integer = 1 const ForwardSearch: Boolean = True): Integer
& ! & ! & ! & nbsp fonction InternalInteger(var Variable: Integer const HighBound, LowBound: Integer): Boolean
& ! & ! & ! & nbsp fonction InternalWord(Const Index: Integer): String
& nbsp & nbsp public
& ! & ! & ! & nbsp fonction
Gauche(Count: Integer): String
& ! & ! & ! & nbsp fonction Droite(Count: Integer): String
& ! & ! & ! & nbsp fonction Mid(const AStart, ACount: Integer): String
& ! & ! & ! & nbsp fonction en Majuscules: String
& ! & ! & ! & nbsp fonction en Minuscules: String
& ! & ! & ! & nbsp fonction IsEmpty: Boolean
& ! & ! & ! & nbsp fonction StartsWith(const AString:String
& ! & ! & ! & ! & ! & nbsp Const a la Casse: Boolean = False): Boolean
& ! & ! & ! & nbsp fonction EndsWith(const AString: String
& ! & ! & ! & ! & ! & nbsp const a la Casse: Boolean = False): Boolean
& ! & ! & ! & nbsp fonction Find(Const sous-Chaîne de caracteres: String const StartPos: Entier = 1
& ! & ! & ! & ! & ! & nbsp const a la Casse: Boolean = True): Entier
& ! & ! & ! & nbsp fonction FindRev(Const sous-Chaîne de caracteres: String const StartPos: Entier = -1
& ! & ! & ! & ! & ! & nbsp const a la Casse: Boolean = True): Entier
& ! & ! & ! & nbsp fonction (const sous-Chaîne de caracteres: String
& ! & ! & ! & ! & ! & nbsp const a la Casse: Boolean = True): Boolean
& ! & ! & ! & nbsp fonction IsNumber: Boolean
& ! & ! & ! & nbsp fonction Append(const Valeur: String): String
& ! & ! & ! & nbsp fonction Prepend(const Valeur: String): String
& ! & ! & ! & nbsp fonction Supprimer(const Index, Longueur: Entier): String
& ! & ! & ! & nbsp procedure Truncate(const Nouvellelongueur: Integer)
& ! & ! & ! & nbsp procedure de Remplissage(const AChar: Char Nouvellelongueur: Entier = -1)
& ! & ! & ! & nbsp procedure Insert(const Index: Integer const AString: String)
& ! & ! & ! & nbsp proprietes Contenu: la Chaîne de Lecture Tampon Ecrire Tampon
& ! & ! & ! & nbsp proprietes RefCount:Entier lire GetRefCount
& ! & ! & ! & nbsp proprietes Caracteres[Const Index: Integer]: Char lire GetCharacter ecrire SetCharacter par defaut
& ! & ! & ! & nbsp proprietes Mots[Const Index: Integer]: la Chaîne de lecture InternalWord
& ! & ! & ! & nbsp proprietes WordCount: Entier lire GetWordCount
& ! & ! & ! & nbsp proprietes Longueur: Integer lire GetLength ecrire SetLength
& ! & ! & ! & nbsp proprietes WordSeparators: TCharSet lire GetWordSeparators ecrire SetWordSeparators
& ! & ! & ! & nbsp proprietes AsPChar: PChar lire GetAsPChar ecrire SetAsPChar
& ! & ! & ! & nbsp proprietes AsInteger: Entier lire GetAsInteger ecrire SetAsInteger
& ! & ! & ! & nbsp proprietes al'epee: Mot lire GetAsWord ecrire SetAsWord
& nbsp & nbsp fin

application

& nbsp & nbsp
{JclStrings,} FastStrings
{ TString }
fonction TString.EndsWith(const AString: String
& nbsp & nbsp const a la Casse: Boolean): Boolean
begin
& nbsp & nbsp si
a la Casse puis
& ! & ! & ! & nbsp
Result := AnsiSameStr(AString, Droite(le Systeme.Longueur(AString)))
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := AnsiSameText(AString,Droite(le Systeme.Longueur(AString)))
fin
fonction TString.FindEx(const sous-Chaîne de caracteres: String
& nbsp & nbsp const a la Casse: Boolean const StartPos: Integer
& nbsp & nbsp const ForwardSearch: Boolean): Integer
begin
& nbsp & nbsp
Result := SmartPos(sous-Chaîne, Tampon, a la Casse, StartPos, ForwardSearch)
fin
procedure TString.De remplissage(const AChar: Char Nouvellelongueur: Entier)
begin
& nbsp & nbsp si
(Nouvellelongueur < 0) puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si
Longueur > 0
& ! & ! & ! & ! & ! & nbsp
FillChar(Tampon[1], la Longueur, l'ord(AChar))
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp
FillChar(Tampon[1], 1, ord(AChar))
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
SetLength(Nouvellelongueur)
& ! & ! & ! & nbsp FillChar(Tampon[1], la Longueur, l'ord(AChar))
& nbsp & nbsp fin
fin
fonction TString.Trouver(const sous-Chaîne de caracteres: String const StartPos: Integer
& nbsp & nbsp const a la Casse: Boolean): Integer
begin
& nbsp & nbsp
Result := FindEx(sous-Chaîne, a la Casse, StartPos)
fin
fonction TString.FindRev(const sous-Chaîne de caracteres: String const StartPos: Integer
& nbsp & nbsp const a la Casse: Boolean): Integer
var
& nbsp & nbsp
RealStartPos: Entier
begin
& nbsp & nbsp si
StartPos < 0 RealStartPos := Length else RealStartPos := StartPos
& nbsp & nbsp Resultat := FindEx(sous-Chaîne, a la Casse, RealStartPos, False)
fin
fonction TString.GetAsPChar: PChar
begin
& nbsp & nbsp
Result := PChar(Tampon)
fin
fonction TString.GetCharacter(const Index: Integer): Char
begin
& nbsp & nbsp si
IsEmpty ou (Index > Longueur) puis
& ! & ! & ! & nbsp
Resultat := #0
& nbsp & nbsp
else
& ! & ! & ! & nbsp
Result := Tampon[Index]
fin
fonction TString.GetLength: Integer
var
& nbsp & nbsp
P: Pointeur
begin
& nbsp & nbsp
Result := 0
& nbsp & nbsp si Pointeur(Tampon) <> nil then
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
P : Pointeur = (Integer(Pointeur(Tampon)) - 4)
& ! & ! & ! & nbsp Resultat := Integer(P^) et (pas $80000000 rsh 1)
& nbsp & nbsp fin
fin
fonction TString.IsEmpty: Boolean
begin
& nbsp & nbsp
Result := (Longueur = 0)
fin
fonction TString.Gauche(Count: Integer): String
begin
& nbsp & nbsp si
Nombre > Longueur puis
& ! & ! & ! & nbsp
Result := Tampon
& nbsp & nbsp else begin
& ! & ! & ! & nbsp
Systeme.SetLength(Resultat, Nombre)
& ! & ! & ! & nbsp Deplacer(Tampon[1],Resultat[1],Comte)
& nbsp & nbsp fin
fin
fonction TString.Minuscule: String
begin
& nbsp & nbsp
Result := SysUtils.Minuscules( Tampon )
fin
fonction TString.Mi(const AStart, ACount: Entier): String
begin
& nbsp & nbsp
Result := Copy(Buffer, AStart, ACount)
fin
fonction TString.Droite(Count: Integer): String
begin
& nbsp & nbsp si
Nombre > Longueur puis
& ! & ! & ! & nbsp
Resultat := '
& nbsp & nbsp
else begin

& ! & ! & ! & nbsp
Systeme.SetLength(Resultat, Nombre)
& ! & ! & ! & nbsp Deplacer(Tampon[Longueur(Comte-1)],le Resultat[1],Comte)
& nbsp & nbsp fin
fin
procedure TString.SetAsPChar(const Valeur: PChar)
begin
& nbsp & nbsp
de la memoire Tampon := Valeur
fin
procedure TString.SetCharacter(const Index: Integer const Valeur: Char)
begin
& nbsp & nbsp si pas
IsEmpty puis
& ! & ! & ! & nbsp si
(Index < Longueur) et (Valeur <> GetCharacter(Index)) puis
& ! & ! & ! & ! & ! & nbsp
Tampon[Index] := Valeur
fin
procedure TString.SetLength(const Valeur: Entier)
begin
& nbsp & nbsp
Systeme.SetLength( Tampon, Valeur )
fin
fonction TString.StartsWith(const AString: String
& nbsp & nbsp const a la Casse: Boolean): Boolean
begin
& nbsp & nbsp si
a la Casse puis
& ! & ! & ! & nbsp
Result := AnsiSameStr(AString, a Gauche(le Systeme.Longueur(AString)))
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := AnsiSameText(AString,a Gauche(le Systeme.Longueur(AString)))
fin
procedure TString.Truncate(const Nouvellelongueur: Entier)
begin
& nbsp & nbsp
Longueur := Nouvellelongueur
fin
fonction TString.Majuscules: String
begin
& nbsp & nbsp
Result := SysUtils.Majuscules( Tampon )
fin
fonction TString.Contient(const sous-Chaîne de caracteres: String
& nbsp & nbsp const a la Casse: Boolean): Boolean
begin
& nbsp & nbsp
Result := Find(sous-Chaîne, 1, a la Casse) > 0
fin
procedure TString.Insert(const Index: Integer const AString: String)
begin
& nbsp & nbsp
Systeme.Insert(AString, Tampon, Index)
fin
fonction TString.Append(const Valeur: String): String
begin
& nbsp & nbsp
Insert(Longueur, Valeur)
& nbsp & nbsp Resultat := Tampon
fin
fonction TString.Prepend(const Valeur: String): String
begin
& nbsp & nbsp
Insert(1, Valeur)
& nbsp & nbsp Resultat := Tampon
fin
fonction TString.Supprimer(const Index, Longueur: Entier): String
begin
& nbsp & nbsp
Result := Tampon
& nbsp & nbsp Supprimer(Resultat, Index, Longueur)
fin
fonction TString.IsNumber: Boolean
var
& nbsp & nbsp
i: Integer
begin
& nbsp & nbsp
Result := True
& nbsp & nbsp pour j'ai := 1 de Longueur do
& ! & ! & ! & nbsp si pas
(GetCharacter(i) de ['0'..'9', ' ','-','.']) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp
Resultat := False
& ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & nbsp fin
fin
fonction TString.InternalInteger(var Variable: Integer const HighBound,
& nbsp & nbsp LowBound: Integer): Boolean
var
& nbsp & nbsp
ErrorCode: Integer
begin
& nbsp & nbsp
Resultat := False
& nbsp & nbsp si IsEmpty ou pas IsNumber Quitter
& nbsp & nbsp Val(Tampon, Variable, ErrorCode)
& nbsp & nbsp Result := (code d'erreur = 0) et ((Variable >= LowBound) et (Variable <= HighBound))
fin
fonction TString.GetAsInteger: Integer
begin
& nbsp & nbsp
InternalInteger(Resultat, Haute(Entier), Faible(Entier))
fin
procedure TString.SetAsInteger(const Valeur: Entier)
begin
& nbsp & nbsp
Str(Valeur, Tampon)
fin
fonction TString.GetAsWord: Mot
var
& nbsp & nbsp
Tmp: Integer
begin
& nbsp & nbsp si
InternalInteger(Tmp, 0, 65535) puis
& ! & ! & ! & nbsp
Result := Tmp
& nbsp & nbsp else
& ! & ! & ! & nbsp
Result := 0
fin
procedure TString.SetAsWord(const Valeur: Word)
begin
& nbsp & nbsp
Str(Valeur, Tampon)
fin
fonction TString.GetWordSeparators: TCharSet
begin
& nbsp & nbsp
Result := FWordSeparators
fin
procedure TString.SetWordSeparators(const Valeur: TCharSet)
begin
& nbsp & nbsp si
FWordSeparators <> Valeur puis
& ! & ! & ! & nbsp
FWordSeparators := Valeur
fin
fonction TString.InternalWord(const Index: Integer): String
var
& nbsp & nbsp
I,J,N: Integer
& nbsp & nbsp L: LongWord
& nbsp & nbsp P: PChar
& nbsp & nbsp Un: Boolean
begin
& nbsp & nbsp si
(Index <= 0) Quitter
& nbsp & nbsp L := Longueur
& nbsp & nbsp P : Pointeur = (Tampon)
& nbsp & nbsp A := False
& nbsp & nbsp N := 1
& nbsp & nbsp pour j'ai := 1 de L do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si pas
(P^ de WordSeparators) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si pas

& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp si
N = Index puis
& nbsp & nbsp & ! & ! & ! & ! & ! & nbsp commencer
& nbsp & nbsp nbsp & & ! & ! & ! & ! & ! & ! & nbsp
N := L 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Inc(P)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pour J := I 1 de L do
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si
P^ de WordSeparators
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
N := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Inc(P)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Resultat := Copy(Buffer,I,N-I)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp Un := True
& ! & ! & ! & ! & ! & ! & ! & nbsp Inc(N)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else if

& ! & ! & ! & ! & ! & nbsp
:= False
& ! & ! & ! & nbsp Inc(P)
& nbsp & nbsp fin
& nbsp & nbsp Resultat := '
fin
fonction TString.GetWordCount: Integer
& nbsp & nbsp fonction CountOfWords(const S: string const Delimiteurs: TCharSet): Entier
& nbsp & nbsp asm
& ! & ! & ! & ! & ! & ! & ! & nbsp
PUSH EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp TEST EAX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp EJ @@q0
& ! & ! & ! & ! & ! & ! & ! & nbsp MOV ECX,[EAX-4]
& ! & ! & ! & ! & ! & ! & ! & nbsp MOV EBX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JS @@qz
& ! & ! & ! & ! & ! & ! & ! & nbsp PUSH ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp XOR EAX,EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp JMP @@lp2
@@iw: INC EAX
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JS @@ex
@@lp1: MOVZX ESI,BYTE PTR [EBX ECX]
& ! & ! & ! & ! & ! & ! & ! & nbsp BT [EDX],ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp JC @@nx
& ! & ! & ! & ! & ! & ! & ! & nbsp DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JNS @@lp1
@@ex: POP ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp POP EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp RET
@@lp2: MOVZX ESI,BYTE PTR [EBX ECX]
& ! & ! & ! & ! & ! & ! & ! & nbsp BT [EDX],ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp CNP @@iw
@@nx: DEC ECX
& ! & ! & ! & ! & ! & ! & ! & nbsp JNS @@lp2
& ! & ! & ! & ! & ! & ! & ! & nbsp POP ESI
& ! & ! & ! & ! & ! & ! & ! & nbsp POP EBX
& ! & ! & ! & ! & ! & ! & ! & nbsp RET
@@qz: XOR EAX,EAX
@@q0: POP EBX
& nbsp & nbsp
fin
begin
& nbsp & nbsp si
IsEmpty puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
Resultat := 0
& ! & ! & ! & nbsp Sortie
& nbsp & nbsp fin
& nbsp & nbsp Resultat := CountOfWords(Tampon, FWordSeparators)
fin
fonction TString.GetRefCount: Integer
var
& nbsp & nbsp
P: Pointeur
begin
& nbsp & nbsp
Result := 0
& nbsp & nbsp si Pointeur(Tampon) <> nil then
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
P : Pointeur = (Integer(Pointeur(Tampon)) - 8)
& ! & ! & ! & nbsp Resultat := Integer(P^)
& nbsp & nbsp fin
fin
fin.



Une classe string pour delphi

Une classe string pour delphi : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation