AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenkette im RichEdit zählen

Ein Thema von Elexarie · begonnen am 27. Mai 2011 · letzter Beitrag vom 27. Mai 2011
 
blackfin
(Gast)

n/a Beiträge
 
#5

AW: Zeichenkette im RichEdit zählen

  Alt 27. Mai 2011, 14:15
Schau dir mal das MapReduce Verfahren an, wenn du in Texten nach der Anzahl / Häufigkeit von Wörtern suchen willst.
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:
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;
Edit II: Reguläre Ausdrücke würden sich hier alternativ auch anbieten...

Geändert von blackfin (27. Mai 2011 um 14:47 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 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