AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Unit ApproxStrUtils
Thema durchsuchen
Ansicht
Themen-Optionen

Unit ApproxStrUtils

Ein Thema von Gausi · begonnen am 13. Mai 2008 · letzter Beitrag vom 17. Mai 2008
 
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#1

Unit ApproxStrUtils

  Alt 13. Mai 2008, 16:20
ApproxStrUtils
Version 0.1

Diese Unit stellt einige Funktionen bereit, mit deren Hilfe man einen String in einem anderen suchen kann. Das geht mit Pos, PosEx, AnsiContainsStr, und dem ganzen Krempel. Klar, kein Problem. 8)

Aber was macht man, wenn man auch ein paar Rechtschreibfehler erlauben will? Man sucht z.B. nach "Schifffahrt", aber der Text, in dem gesucht wird, benutzt die alte Rechtschreibung, so dass immer nur von "Schiffahrt" die Rede ist? Dann ist man hiermit genau richtig.

Diese Unit stellt einige Funktionen bereit, mit denen ein Text nach einem Muster abgesucht wird, wobei eine gewisse Anzahl von Fehlern erlaubt ist. Ein "Fehler" ist dabei:
  • Ein Einfügen eines Zeichens
  • Ein Entfernen eines Zeichens
  • Ein Ändern eines Zeichens
Für die Informatiker: Hier gehts also um die Edit- oder Levenshtein-Distanz.

Folgende Funktionen werden bereitgestellt:

function ApproxDistance(const AText, AOther: string): Integer; Berechnet die Edit-Distanz der beiden Strings.

function ApproxResemblesText(const AText, AOther: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der eine String ähnlich zu dem anderen gemäß der Edit-Distanz ist.

function ApproxContainsStr(const AText, ASubText: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der Subtext im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz enthalten ist. Groß- und Kleinschreibung wird berücksichtigt.

function ApproxContainsText(const AText, ASubText: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der Subtext im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz enthalten ist. Groß- und Kleinschreibung wird nicht berücksichtigt.

function ApproxPosEx(const AText, ASubText: string; Offset: Integer; Out Count: Integer; MaxError: Integer = 1): Integer; Gibt den Startindex eines Vorkommens des Subtextes im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz. Der Text wird ab der Position Offset durchsucht. Der Out-Parameter Count enthält die Länge des gefunden Vorkommens (z.B. zur Benutzung in copy).

function ApproxPos(const AText, ASubText: string; Out Count: Integer; MaxError: Integer = 1): Integer; Dasselbe wie ApproxPosEx mit Offset=1.

function ApproxBestAppearance(const AText, ASubText: string; out Count, BestError: Integer): Integer; Liefert den Startindex des ersten Vorkommens mit minimaler Fehlerzahl zurück. Die Out-Parameter Count und BestError geben die Länge des Vorkommens bzw. die Anzahl der Fehler an.

Ich hoffe, ich habe unsinnige Eingaben soweit wie möglich abgefangen, sodass dann trotzdem was halbwegs sinnvolles als Ergebnis geliefert wird. Prinzipbedingt findet ApproxPosEx nicht wirklich alle Vorkommen (wird auch in der Demo klar), aber wenn das gesuchte Wort irgendwo ungefähr auftaucht, dann wird das auch gefunden.

Fehler und Verbesserungsvorschläge sind wie immer willkommen.
Angehängte Dateien
Dateityp: zip approxstrutils_demo_160.zip (6,1 KB, 65x aufgerufen)
Dateityp: pas approxstrutils_118.pas (15,2 KB, 70x aufgerufen)
The angels have the phone box.
  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 06:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz