AGB  ·  Datenschutz  ·  Impressum  







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

Match funktion?

Ein Thema von Pseudemys Nelsoni · begonnen am 30. Apr 2005 · letzter Beitrag vom 23. Okt 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Match funktion?

  Alt 30. Apr 2005, 08:13
Moin,

hat jemand eine Idee wie ich eine Funktion schreiben könnte die 2 strings auf übereinstimmung prüft?
Als Joke sollen * und ? benutzt werden koennen.

Das heisst das wenn die Maske z.b:

Zitat:
???
ist, das Wort 3 Zeichen haben muss und bei:

Zitat:
blah*irgendwas
muss der string auf jedenfall mit "blah" beginnen und mit "irgendwas" enden.

Jemand ne Idee?

die MatchesMask() Funktion geht hierfür nicht, da der Joker "?" dort heisst das ein Zeichen vorkommen KANN, aber nicht MUSS.... ich brauch aber das "muss".
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#2

Re: Match funktion?

  Alt 30. Apr 2005, 08:16
Eine Möglichkeit wäre, dass man mit einer Schleife bei jedem "*" alle 255 ACII-Codes einsetzt und dann prüft.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Match funktion?

  Alt 30. Apr 2005, 08:27
Zitat von Pseudemys Nelsoni:
hat jemand eine Idee wie ich eine Funktion schreiben könnte die 2 strings auf übereinstimmung prüft?
Als Joke sollen * und ? benutzt werden koennen.
Wenn das so bleibt, dann kannst du ja mal die Shell-Funktion MSDN-Library durchsuchenPathMatchSpec zweckentfremden, so wie ich das auch mache. Die ist eigentlich dazu da, zu prüfen, ob ein Ordner- oder Dateiname einem bestimmten Wildcard entspricht. Wenn du allerdings andere Strings übergibt, dann stört sie sich auch nicht daran. Hier die Deklarationen:
Delphi-Quellcode:
function PathMatchSpec(pszFile, pszSpec: PAnsiChar): bool; stdcall;

const
  shlwapi = 'shlwapi.dll';

function PathMatchSpec; external shlwapi name 'PathMatchSpecA';
Code:
[DllImport("shlwapi.dll")]
static extern bool PathMatchSpec(string pwszFile, string pwszSpec);
wobei mich in dem Zusammenhang gleich interessieren würde, ob es eine im .NET Framework eingebaute Möglichkeit gibt. Das Einbinden der API-Funktion (s. zweiter Codeauszug) ist zwar bequem und funktioniert, aber auf lange Sicht ist sie fürs .NET Framework doch eher ungeeignet. Und reguläre Ausdrücke sind gleich ein bisschen zu dick.

Wie dem auch sei, Anwendungsmöglichkeit:
Delphi-Quellcode:
if PathMatchSpec('blahierstehteinvölligsinnloserstringirgendwas','bla*irgendwas') then
  ShowMessage('Passt');

if PathMatchSpec('abc','???') then
  ShowMessage('Passt');
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Match funktion?

  Alt 30. Apr 2005, 11:02
Hi Mathias,

Also in .NET könntest Du doch einfach mit regulären Ausdrücken arbeiten - so "dick" sind die ja nun auch nicht.
Selbst wenn im Ausgangstring nur ein "*" ist, könnte man das doch problemlos in ein "(.*)" umwandeln und damit könnte man auch mit Windows ähnlichen Wildcards arbeiten.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Match funktion?

  Alt 30. Apr 2005, 23:43
Moin Mathias,

eine kleine Einschränkung für die "Zweckentfremdung" sollte aber nicht unerwähnt bleiben:
Der erste Parameter darf maximal MAX_PATH Byte lang sein (MAX_PATH = 260)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Match funktion?

  Alt 30. Apr 2005, 23:53
Zitat von mirage228:
Also in .NET könntest Du doch einfach mit regulären Ausdrücken arbeiten - so "dick" sind die ja nun auch nicht.
Wenn man es geschickt anstellt sind sie überhaupt nicht "dick".
Einfach von Regex ableten und eine versteckte statische Liste führen.
Der Constructor wird versteckt und nach außen ist nur ein GetInstance sichtbar, dass einen RegEx string schluckt und eine Instanz deiner Klasse auspuckt.
Jetzt braucht er in der internen List nur noch eine Regex mit dem string suchen (für die Liste wäre eine HashTable ganz nett ) die Instanz zurückgeben oder eine neue Instanz für den string anlegen, kompilieren ( ), in die Liste schmeißen und zurückgeben.

Auf die Art hast du sackschnelle, kompiliere RegEchsen OHNE dass dir die Kompilierung die Zyklen vom Kopf frisst (wird ja nur einmal pro pattern gemacht ).
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Match funktion?

  Alt 30. Apr 2005, 23:57
Um mal was zu fragen.. ich mag .NET ja auch, und Robert ist ganz klar der Guru Aber.. @Robert, was hast du grade gesagt? Liegts vielleicht daran, das es so spät ist? Ich kapiers irgendwie nicht
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Match funktion?

  Alt 1. Mai 2005, 00:05
Zitat von Dax:
Liegts vielleicht daran, das es so spät ist? Ich kapiers irgendwie nicht
Du kannst RegExen in .Net kompilieren...
Dumm ist nur, dass er jede Regex Instanz kompiliert (und nebenbei eine temporäre Assembly anlegt ) egal, ob es nicht schon eine kompilierte Regex für dieses pattern gibt.
Wenn du eine private statische HashTable (Key: pattern / Value: DeinRegex) führst, kannst du doch darin nachschauen, ob du für dieses pattern schon eine kompilierte Regex "rumliegt".
Um zu verhindern, dass du dich aus Versehen an dem Mechanismus vorbeimogelst sollte der Constructor private sein. Öffentlich wäre dann nur ein
Code:
public static DeinRegex CreateInstance(string pattern)
.
Bin gerade etwas in Eile... wenn ich's diesmal nicht genau erklären konnte... Pech gehabt.

nachtrag: "static" vergessen...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Match funktion?

  Alt 1. Mai 2005, 00:06
Nein, das reicht schon, habs verstanden
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Match funktion?

  Alt 1. Mai 2005, 01:28
Moin!

/EDIT: ok, hat sich erledigt - einen kleinen Satz überlesen...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:54 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