Ein String-Klasse für Delphi

April 7, 2016 Admin Computer 0 10
FONT SIZE:
fontsize_dec
fontsize_inc

Wich-Klasse enthält eine Zeichenfolge String-Funktionen

Ich habe diese kleine String-Klasse basierend auf QStrings und FastStrings, dann ist diese Klasse ist schnell und läuft mehrere String-Funktionen. BTW, zu kompilieren und verwenden Sie diese Klasse müssen Sie FastStrings (Sie können eine Kopie an Peter Morris Homepage zu bekommen).



Warum einen String-Klasse? gut, auch wenn diese Klasse fehlt Überladen von Operatoren ich es brauche, und dachte, dass jemand migth davon profitieren.



UPDATE: Hinzugefügt Starts-und Kleinschreibung und EndsWith

Behoben: Fehler in links, rechts, schneller Wordcount (von QStrings kopiert)





Einheit IMLCommon;



Schnittstelle



Anwendungen

sysutils, Klassen;



So'ne Art

TCharSet = Setzen Char;



TString = Klasse

privat

Puffer: Ansistring;

FWordSeparators: TCharset;



Funktion GetLength: Integer;

Funktion getrefcount: Integer;

Funktion GetCharacter (const Index: Integer): Char;

Funktion GetWordSeparators: TCharSet;



Funktion GetAsPChar: PChar;

Funktion GetAsInteger: Integer;

Funktion GetAsWord: Wort;

Funktion GetWordCount: Integer;



Verfahren SetLength (const Wert: Integer);

Verfahren SetCharacter (const Index: Integer; const Wert: Char);

Verfahren SetWordSeparators (const Wert: TCharSet);



Verfahren SetAsPChar (const Wert: PChar);

Verfahren SetAsInteger (const Wert: Integer);

Verfahren SetAsWord (const Wert: Word);

geschützt

Funktion
FINDEX (Const SubString: Schnur; const Casesensitive: Boolean = true;

const StartPos: Integer = 1; const ForwardSearch: Boolean = True): Integer;

Funktion InternalInteger (var Variable: Integer; const HighBound, UntereGrenze: Integer): Boolean;

Funktion InternalWord (Const Index: Integer): Schnur;

Öffentlichkeit

Funktion
auf der linken Seite (Anzahl: Integer): Schnur;

Funktion Rigth (Anzahl: Integer): Schnur;

Funktion Mid (const AStarten, acount: Integer): Schnur;

Funktion Fall: Schnur;

Funktion Lowercase: Schnur;



Funktion IsEmpty: Boolean;

Funktion Starts (const einst: Schnur;

Const Casesensitive: Boolean = false): Boolean;

Funktion EndsWith (const einst: Schnur;

const Casesensitive: Boolean = false): Boolean;

Funktion Suchen (Const SubString: Schnur; const StartPos: Integer = 1;

const Casesensitive: Boolean = True): Integer;

Funktion FindRev (Const SubString: Schnur; const StartPos: Integer = -1;

const Casesensitive: Boolean = True): Integer;

Funktion Enthält (const SubString: Schnur;

const Casesensitive: Boolean = true): Boolean;

Funktion ISNUMBER: Boolean;



Funktion anhängen (const Wert: Schnur): Schnur;

Funktion Add-Ins (const Wert: Schnur): Schnur;

Funktion Entfernen (const Index, Länge: Integer): Schnur;



Verfahren Trim (const newLength: Integer);

Verfahren Fill (const Achar: Char; NewLength: Integer = -1);

Verfahren Einfügen (const Index: Integer; const einst: Schnur);



Immobilien Inhalt: String lesen Puffer Schreiben Buffer;

Immobilien RefCount: Voll lesen getrefcount;

Immobilien Charaktere [Const Index: Integer]: Char lesen GetCharacter schreiben SetCharacter; Defekt;

Immobilien Wörter [Const Index: Integer]: Lesen String InternalWord;

Immobilien Wordcount: Voll lesen GetWordCount;

Immobilien Länge: Voll lesen GetLength schreiben SetLength;

Immobilien WordSeparators: TCharSet lesen GetWordSeparators schreiben SetWordSeparators;



Immobilien AsPChar: PChar lesen GetAsPChar schreiben SetAsPChar;

Immobilien AsInteger: Voll lesen GetAsInteger schreiben SetAsInteger;

Immobilien AsWord: Wort lesen GetAsWord schreiben SetAsWord;

Ende;







Ausführung



Anwendungen

{} JclStrings, FastStrings;



{} TString



Funktion TString.EndsWith (const einst: Schnur;

const Casesensitive: Boolean): Boolean;

Start

wenn
Casesensitive und dann

Ergebnis: = AnsiSameStr (einstring, Rigth (System.Length (einstring)))

andere

Ergebnis: = AnsiSameText (einstring, Rigth (System.Length (einstring)));

Ende;



Funktion TString.FindEx (const SubString: Schnur;

const Casesensitive: Boolean; const StartPos: Integer;

const ForwardSearch: Boolean): Integer;

Start

Ergebnis: = smartPOS (SubString, Buffer, Casesensitive, StartPos, ForwardSearch);

Ende;



Verfahren TString.Fill (const Achar: Char; NewLength: Integer);

Start

wenn
(newLength <0) und dann

Start

wenn
Länge> 0 und dann

FillChar (Buffer [1], Länge, ord (Achar))

andere

FillChar (Buffer [1], 1, ord (Achar));

Ende

andere

Start

SetLength (newLength);

FillChar (Buffer [1], Länge, ord (Achar));

Ende;

Ende;



Funktion TString.Find (const SubString: Schnur; const StartPos: Integer;

const Casesensitive: Boolean): Integer;

Start

Ergebnis: = FINDEX (SubString, Casesensitive, StartPos);

Ende;



Funktion TString.FindRev (const SubString: Schnur; const StartPos: Integer;

const Casesensitive: Boolean): Integer;

var

RealStartPos: Integer;

Start

wenn
StartPos <0 und dann RealStartPos: Länge = andere RealStartPos: = StartPos;

Ergebnis: = FINDEX (substring, Casesensitive, RealStartPos, false);

Ende;



Funktion TString.GetAsPChar: PChar;

Start

Ergebnis: = PChar (Buffer);

Ende;



Funktion TString.GetCharacter (const Index: Integer): Char;

Start

wenn
IsEmpty oder (Index> Länge) und dann

Ergebnis: = # 0

andere

Ergebnis: = Buffer [Index];

Ende;



Funktion TString.GetLength: Integer;

var

P: Pointer;

Start

Ergebnis: = 0;

wenn Zeiger (Buffer) nil dann

Start

P: = Pointer (Integer (Pointer (Buffer)) - 4);

Ergebnis: Integer = (P ^) und (unterlassen Sie $ 80000000 shr 1);

Ende;

Ende;



Funktion TString.IsEmpty: Boolean;

Start

Ergebnis: = (Länge = 0);

Ende;



Funktion TString.Left (Anzahl: Integer): Schnur;

Start

wenn
Graf> Länge und dann

Ergebnis: = Puffer

sonst beginnen

System.SetLength (Ergebnis, Graf);

Bewegen (Buffer [1], Ergebnisse [1], Graf);

Ende;

Ende;



Funktion TString.LowerCase: Schnur;

Start

Ergebnis: = SysUtils.LowerCase (Buffer);

Ende;



Funktion TString.Mid (const AStarten, acount: Integer): Schnur;

Start

Ergebnis: = Copy (Buffer, AStarten, acount);

Ende;



Funktion TString.Rigth (Anzahl: Integer): Schnur;

Start

wenn
Graf> Länge und dann

Ergebnis: = ''

sonst beginnen

System.SetLength (Ergebnis, Graf);

Move (Buffer [Länge - (Count-1)], Ergebnis [1], Graf);

Ende;

Ende;



Verfahren TString.SetAsPChar (const Wert: PChar);

Start

Buffer: = Value;

Ende;



Verfahren TString.SetCharacter (const Index: Integer; const Wert: Char);

Start

wenn nicht
IsEmpty und dann

wenn
(Übersicht und (Value GetCharacter (Index)) und dann

Buffer [Index]: = Value;

Ende;



Verfahren TString.SetLength (const Wert: Integer);

Start

System.SetLength (Buffer, value);

Ende;



Funktion TString.StartsWith (const einst: Schnur;

const Casesensitive: Boolean): Boolean;

Start

wenn
Casesensitive und dann

Ergebnis: = AnsiSameStr (einstring, links (System.Length (einstring)))

andere

Ergebnis: = AnsiSameText (einstring, links (System.Length (einstring)));

Ende;



Verfahren TString.Truncate (const newLength: Integer);

Start

Länge: = newLength;

Ende;



Funktion TString.Uppercase: Schnur;

Start

Ergebnis: = SysUtils.UpperCase (Buffer);

Ende;



Funktion TString.Contains (const SubString: Schnur;

const Casesensitive: Boolean): Boolean;

Start

Ergebnis: = Find (SubString, 1, Casesensitive)> 0;

Ende;



Verfahren TString.Insert (const Index: Integer; const einst: Schnur);

Start

System.Insert (einstring, Buffer, Index);

Ende;



Funktion TString.Append (const Wert: Schnur): Schnur;

Start

Einfügen (Länge, Wert);

Ergebnis: = Buffer;

Ende;



Funktion TString.Prepend (const Wert: Schnur): Schnur;

Start

Einfügen (1, value);

Ergebnis: = Buffer;

Ende;



Funktion TString.Remove (const Index, Länge: Integer): Schnur;

Start

Ergebnis: = Buffer;

Löschen (Ergebnis, Index, Länge);

Ende;



Funktion TString.IsNumber: Boolean;

var

i: Integer;

Start

Result: = True;

für i: = 1 zu Länge tun

wenn nicht
(GetCharacter (i) in ['0' .. '9', '+', '-'. '"]) und dann

Start

Ergebnis: = false;

Ausgang;

Ende;

Ende;



Funktion TString.InternalInteger (var Variable: Integer; const HighBound,

UntereGrenze: Integer): Boolean;

var

Errorcode: Integer;

Start

Ergebnis: = false;

wenn IsEmpty oder nicht ISNUMBER und dann Exit;

Val (Buffer, variabel, Errorcode);

Ergebnis: = (Fehlercode = 0) und ((Variable> = untereGrenze) und (Variable <= HighBound));

Ende;



Funktion TString.GetAsInteger: Integer;

Start

InternalInteger (Ergebnis, High (Integer), Niedrig (Integer));

Ende;



Verfahren TString.SetAsInteger (const Wert: Integer);

Start

Str (Value, Buffer);

Ende;



Funktion TString.GetAsWord: Wort;

var

Tmp: Integer;

Start

wenn
InternalInteger (TMP, 0, 65535) und dann

Ergebnis: = Tmp

andere

Ergebnis: = 0;

Ende;



Verfahren TString.SetAsWord (const Wert: Word);

Start

Str (Value, Buffer);

Ende;



Funktion TString.GetWordSeparators: TCharSet;

Start

Ergebnis: = FWordSeparators;

Ende;



Verfahren TString.SetWordSeparators (const Wert: TCharSet);

Start

wenn
FWordSeparators Wert und dann

FWordSeparators: = Wert;

Ende;



Funktion TString.InternalWord (const Index: Integer): Schnur;

var

I, J, N: Integer;

L: Longword;

P: PChar;

A: Boolean;

Start

wenn
(Index <= 0) und dann Exit;

L: = Länge;

P: = Zeiger (Buffer);

A: = false;

N: = 1;

für I: = 1 zu L tun

Start

wenn nicht
(P ^ in WordSeparators) und dann

Start

wenn nicht
A und dann

Start

wenn
N = N und dann

Start

N: = L + 1;

Inc (P);

für J: = I + 1 zu L tun

Start

wenn
P ^ in WordSeparators und dann

Start

N: = J;

Break;

Ende;

Inc (P);

Ende;

Ergebnis: = Copy (Buffer, I, N-I);

Ausgang;

Ende;

A: = True;

Inc (N);

Ende;

Ende

else if
A und dann

A: = false;

Inc (P);

Ende;

Ergebnis: = '';

Ende;



Funktion TString.GetWordCount: Integer;



Funktion CountOfWords (const S: Schnur; const-Trennzeichen: TCharSet): Integer;

asm

PUSH EBX

TEST EAX EAX

JE@@q0

MOV ECX, [EAX-4]

MOV EBX, EAX

ECX Dezember

JS@@QZ

PUSH ESI

XOR EAX EAX

JMP@@LP2

@@IW: INC EAX

ECX Dezember

JS@@ex

@@LP1: MOVZX ESI, BYTE PTR [EBX + ECX]

BT [EDX], ESI

JC@@nx

ECX Dezember

JNS@@LP1

@@Ex: POP ESI

POP EBX

RET

@@LP2: MOVZX ESI, BYTE PTR [EBX + ECX]

BT [EDX], ESI

JNC@@IW

@@Nx: December ECX

JNS@@LP2

POP ESI

POP EBX

RET

@@QZ: XOR EAX, EAX

@@Q0: POP EBX

Ende;



Start

wenn
IsEmpty und dann

Start

Ergebnis: = 0;

Ausgang;

Ende;



Ergebnis: = CountOfWords (Buffer, FWordSeparators);

Ende;



Funktion TString.GetRefCount: Integer;

var

P: Pointer;

Start

Ergebnis: = 0;

wenn Zeiger (Buffer) nil dann

Start

P: = Pointer (Integer (Pointer (Buffer)) - 8);

Ergebnis: Integer = (P ^);

Ende;

Ende;



Ende.




(0)
(0)

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha