![]() |
Zeichenkette im RichEdit zählen
Hallo Delphi-Praix,
ich sitze gerade an einem kleinen Programm, mit dem ich Chars und Strings zählen soll. Chars habe ich hinbekommen, was wiefolgt aussieht:
Delphi-Quellcode:
Nun soll ich das ganze aber mit einer Zeichenkette machen. Ich habe aber gerade keine logische Lösung dafür.
begin
CountButton2 := 0; for i := 1 to Length(RichEdit1.Text) do begin if (RichEdit1.Text[i] = Edit1.Text) then inc(CountButton2) end; Label2.Caption := 'Es sind ' + inttostr(CountButton2) + ' ' + Edit1.Text + ' vorhanden.'; end; Angenommen ich suche 'Hallo'; Ich muss ja von der Position 1 die nächsten fünf Buchstaben überprüfen. Nun ist meine Idee ursprünglich gewesen, die nächsten 4 Stacks des Arrays zu untersuchen, aber wie mache ich das denn am einfachsten. Leider kann man ja nicht auf diese Art vorgehen. Habt ihr andere Vorschläge. Bitte erstmal nur Pseudocode. Will die Lösung selbst syntaktisch ausarbeiten. Wenn ich wirklich nicht weiterkomme, bitte ich noch einmal um einen Code.:oops: Vielen Dank im Vorraus. Entschuldigungen für die vielen Fragen. Ich hoffe ich kann künftig selber dienen. |
AW: Zeichenkette im RichEdit zählen
Versuch es einmal mit
![]() |
AW: Zeichenkette im RichEdit zählen
Schon mal bei den StrUtils geschaut?
AnsiContainsText sucht in einen text ob das Suchwort vorhanden ist Gruss alfold |
AW: Zeichenkette im RichEdit zählen
Das hilft so für sich allein aber beim Zählen auch nicht weiter.
|
AW: Zeichenkette im RichEdit zählen
Schau dir mal das
![]() Auf der Seite einfach mal etwas nach unten Scrollen und die "Beispielhafte Berechnung" angucken. Ansonsten kannst du auch die folgende Funktion verwenden, die die Position eines gesuchten strings in einem Text ermittelt. Wenn ein Wort öfters vorkommt, einfach den Text ab der ersten Fundstelle + Wortlänge des gesuchten Wortes abschneiden und weitersuchen.
Delphi-Quellcode:
Edit II: Reguläre Ausdrücke würden sich hier alternativ auch anbieten...
function ASMstrPos(SubStr: AnsiString; Str: AnsiString;): DWORD;
type StrRec = packed record allocSiz: Longint; refCnt: Longint; length: Longint; end; const skew = sizeof(StrRec); asm TEST EAX,EAX JE @@noWork TEST EDX,EDX JE @@stringEmpty PUSH ECX PUSH EBX PUSH ESI PUSH EDI MOV ESI,EAX MOV EDI,EDX MOV EBX,ECX MOV ECX,[EDI-skew].StrRec.length SUB ECX,EBX PUSH EDI ADD EDI,EBX MOV EDX,[ESI-skew].StrRec.length DEC EDX JS @@fail MOV AL,[ESI] INC ESI SUB ECX,EDX JLE @@fail @@loop: REPNE SCASB JNE @@fail MOV EBX,ECX PUSH ESI PUSH EDI MOV ECX,EDX REPE CMPSB POP EDI POP ESI JE @@found MOV ECX,EBX JMP @@loop @@fail: POP EDX XOR EAX,EAX JMP @@exit @@stringEmpty: XOR EAX,EAX JMP @@noWork @@found: POP EDX MOV EAX,EDI SUB EAX,EDX @@exit: POP EDI POP ESI POP EBX POP ECX @@noWork: end; |
AW: Zeichenkette im RichEdit zählen
So. Mit unwahrscheinlicher Kreativität.. Naja eigentlich war es ganz simpel, habe ich den String durchsucht bekommen.
Delphi-Quellcode:
Das wars! Danke für die Hilfe.. Mit dem ASM Code kann ich leider nichts anfangen .:(
var i : integer;
begin for i := 1 to Length(RichEdit1.Text) do begin RichEdit1.SelStart := i - 1; RichEdit1.SelLength := Length(Edit2.Text); if (RichEdit1.SelText = Edit2.Text) then inc(CountButton3); end; Label4.Caption := 'Es sind ' + inttostr(Countbutton3) + ' ' + Edit2.Text + ' vorhanden.'; end; |
AW: Zeichenkette im RichEdit zählen
Ich hätte das so versucht (Fehler vorbehalten):
Delphi-Quellcode:
uses StrUtils;
function PatternCount(Src, Pattern: string; CaseInsensitive: Boolean = false): integer; var CurrentPos: integer; begin if CaseInsensitive then begin Src := AnsiLowerCase(Src); Pattern := AnsiLowerCase(Pattern); end; Result := 0; CurrentPos := PosEx(Pattern, Src); while CurrentPos <> 0 do begin inc(Result); CurrentPos := PosEx(Pattern, Src, CurrentPos + Length(Pattern)); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz