Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Tools / Hilfsfunktionen /

MatchesWildCard - Abgleich einer Zeichenkette mit Jokerzeichen

[C] int cxiMatchesWildCard (const char *name, const char *wild)

[S2:STANDARD] Abgleich eines Namens mit einer Jokerzeichen-Spezifikation

name:
Zu überprüfender Name (muss mindestens ein Zeichen lang sein)

wild:
Spezifikation, die Jokerzeichen enthalten kann (NULL entspricht "*")

return:
- 1, wenn der Name zur Spezifikation passt;
- 0, wenn der Name nicht zur Spezifikation passt

Diese Funktion überprüft, ob die Spezifikation 'wild' auf den übergebenen String 'name' zutrifft.

Die Jokerzeichen-Spezifikation <GesamtAusdruck> wird durch die folgenden Syntaxdiagramme beschrieben:

<GesamtAusdruck> ::= <UndAusdruck> { '|' <UndAusdruck> }

<UndAusdruck> ::= <NichtAusdruck> { '&' <NichtAusdruck> }

<NichtAusdruck> ::= <BasisAusdruck> || '!' <BasisAusdruck>

<BasisAusdruck> ::= <BasisSymbol> { <BasisSymbolOder!> }

<BasisSymbolOder!> ::= <BasisSymbol> || '!'

<BasisSymbol> ::= '*' || '?' || <Zeichen>

{ ... } bedeutet beliebig häufige Wiederholung (auch null-mal), Terminalzeichen sind durch einfache Anführungszeichen gekennzeichnet, <Zeichen> ist jedes in einem Variablen- oder Dateinamen zulässige Zeichen mit Ausnahme der obigen Sonderzeichen '|', '&', '!', '*', '?'.

Die gesamte Spezifikation ist zutreffend, wenn
von den durch '|' getrennten Teilstrings mindestens einer zutrifft,
von den durch '&' getrennten Teilstrings alle zutreffen,
ein durch '!' eingeleiteter Teilstring nicht zutrifft.
Der Operator '!' hat Vorrang vor '&', '&' hat Vorrang vor '|'.
Das '?' repräsentiert genau ein beliebiges Zeichen in 'name',
der '*' steht für beliebig viele (auch null) beliebige Zeichen.
Groß- und Kleinschreibung wird nicht berücksichtigt.
Leerzeichen werden nicht ignoriert, sie sind an jeder Stelle signifikant!

Die Spezifikation ist also eine UND-/ODER-/NICHT-Verknüpfung von Basisausdrücken, die jeweils eine Maske mit den von Dateinamen bekannten Zeichen '*' und '?' darstellen. Achtung: Ein Basisausdruck kann mehrere '*' enthalten; mehrere direkt aufeinander folgende '*' sind gleichbedeutend mit einem.

Beispiele:
Bei den folgenden Spezifikationen ist jeweils angegeben, für welche Namen diese Funktion TRUE (1) zurückgibt:

"*": Alle Namen.

"?": Alle Namen, die aus genau einem Zeichen bestehen.

"*.*": Alle Namen, die mindestens einen Punkt enthalten.

"!*": Kein Name.

"!*.*": Alle Namen, die keinen Punkt enthalten.

"*!.*": Alle Namen, die mindestens einmal die Zeichenfolge "!." enthalten.

"*.*!": Alle Namen, die mindestens einen Punkt enthalten und (gleichzeitig) mit '!' enden.

"a": Nur der Name "a" (oder "A").

"!a": Alle Namen außer "a".

"a!": Nur der Name "a!".

"a?": Alle Namen aus zwei Zeichen, die mit 'a' beginnen.

"?a*": Alle Namen, deren zweites Zeichen 'a' ist.

"!?a*": Alle Namen, deren zweites Zeichen nicht 'a' ist (auch einstellige Namen).

"a*": Alle Namen, die mit 'a' beginnen (auch "a" selbst).

"!a*": Alle Namen, die nicht mit 'a' beginnen.

"*a": Alle Namen, die mit 'a' enden (auch "a" selbst).

"!*a": Alle Namen, die nicht mit 'a' enden.

"*a*": Alle Namen, die mindestens ein 'a' enthalten (auch "a" selbst).

"!*a*": Alle Namen, die kein 'a' enthalten.

"a*a": Alle Namen, die mit 'a' beginnen und mit 'a' enden (nicht "a" selbst).

"a*&*a": Alle Namen, die mit 'a' beginnen und mit 'a' enden (auch "a" selbst).

"a*b": Alle Namen, die mit 'a' beginnen und mit 'b' enden.

"a*&*b": Alle Namen, die mit 'a' beginnen und mit 'b' enden.

"!a*&*b": Alle Namen, die nicht mit 'a' beginnen und die mit 'b' enden (auch "b" selbst).

"a?*b": Alle Namen, die mit 'a' beginnen und mit 'b' enden und mindestens drei Zeichen lang sind.

"a*&*b&???*": Alle Namen, die mit 'a' beginnen und mit 'b' enden und mindestens drei Zeichen lang sind.

"a*|*b": Alle Namen, die mit 'a' beginnen oder mit 'b' enden (oder beides).

"*ab*": Alle Namen, die mindestens einmal die Zeichenfolge "ab" enthalten.

"*ab*ab*": Alle Namen, die mindestens zweimal die Zeichenfolge "ab" enthalten.

"!*ab*ab*": Alle Namen, die höchstens einmal die Zeichenfolge "ab" enthalten.

"*ab*&!*ab*ab*": Alle Namen, die genau einmal die Zeichenfolge "ab" enthalten.

"*a*b*": Alle Namen, die mindestens ein 'a' und danach mindestens ein 'b' enthalten.

"*a*&*b*": Alle Namen, die mindestens ein 'a' und mindestens ein 'b' enthalten.

"*a*|*b*": Alle Namen, die mindestens ein 'a' oder mindestens ein 'b' enthalten (oder beides).

"a*&!ab*": Alle Namen, die mit "a", aber nicht mit "ab" beginnen.

"!ab*&a*": Alle Namen, die mit "a", aber nicht mit "ab" beginnen.

"2b|!2b": Alle Namen.

Portabilität:
Diese Funktion ist ab Version 2.03 definiert und in allen unterstützten Systemen verfügbar.

Siehe auch:
MergeWild - Selektives Mischen
FindOpen - Suchschleife über Variablennamen


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 90 von 855, Thema 8315 (MatchesWildCard)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>