home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / like / like.c
Text File  |  1990-01-10  |  3KB  |  107 lines

  1.  
  2. /* LIKE.C
  3.  
  4.    dBASE-IV Funktion LIKE für Clipper nachgebildet.
  5.    (C) (P) Walter Hummerich, 14.09.89
  6.    Put in Public Domain by Walter Hummerich, Köln 91, 10. Dez. 1989
  7.  
  8.  
  9.    Syntax:     LIKE(<expC1>, <expC2>)
  10.  
  11.    Zweck:      Vergleicht zwei Zeichenketten über Suchschablone
  12.  
  13.    Argumente:  <expC1> ist die Suchschablone. Es können die Platzhalter
  14.                '?' (für ein Zeichen) und '*' (für eine beliebige Anzahl
  15.                von Zeichen) verwendet werden.
  16.  
  17.                <expC2> ist die Zeichenkette, die durchsucht wird.
  18.  
  19.    Rückgabe:   Ein logischer Wert.
  20.  
  21.                Stimmt die Zeichenkette <expC2> mit der Suchschablone
  22.                <expC1> überein, gibt LIKE ein logisches .T. zurück,
  23.                sonst ein .F.
  24.  
  25.    Beispiele:  ? LIKE('??cde?', 'abcdef')     && Resultat: .T.
  26.                ? LIKE('*de*', 'abcdef')       && Resultat: .T.
  27.                ? LIKE('ab*ef', 'abcdef')      && Resultat: .T.
  28.                ? LIKE('?cde?', 'abcdef')      && Resultat: .F.
  29.                ? LIKE('*bcde', 'abcdef')      && Resultat: .F.
  30.  
  31.    Anmerkung:  Vergebt mir, C-Freaks, ich bin nur C-Amateur!!!            */
  32.  
  33.  
  34. #include "nandef.h"
  35. #include "extend.h"
  36.  
  37. CLIPPER LIKE()
  38.  
  39. {
  40.   char *maske;
  41.   char *text;
  42.   char* maskpointer;
  43.   int returncode;
  44.  
  45.   if (PCOUNT != 2)
  46.       { returncode = FALSE; goto exit; }
  47.  
  48.   else
  49.  
  50.      if (ISCHAR(1) & ISCHAR(2))
  51.         {
  52.            maske = _parc(1);
  53.            text  = _parc(2);
  54.            maskpointer = maske + _parclen(1);
  55.  
  56.            schleife:
  57.            if ((*maske || *text) == '\0')
  58.               goto ttrue;
  59.  
  60.            if (*maske == '?')
  61.               goto nextcompare;
  62.  
  63.            sonder:
  64.  
  65.            if (*maske == '*')
  66.               {  maske++;
  67.                  if (*maske == '*')
  68.                     goto sonder;
  69.  
  70.                  if (*maske == '\0')
  71.                     goto ttrue;
  72.  
  73.                  maskpointer = maske;
  74.  
  75.                sloop:
  76.                    if (*text == '\0')
  77.                       goto ffalse;
  78.  
  79.                    if (*text != *maske)
  80.                       { text++;
  81.                         goto sloop;
  82.                       }
  83.               }
  84.  
  85.            if (*text != *maske)
  86.               {  maske = maskpointer;
  87.                  goto sloop;
  88.               }
  89.  
  90.            nextcompare:
  91.               maske++;
  92.               text++;
  93.               goto schleife;
  94.  
  95.            ttrue:
  96.               {  returncode = TRUE; goto exit; }
  97.  
  98.            ffalse:
  99.               {  returncode = FALSE; goto exit; }
  100.         }
  101.      else
  102.         returncode = FALSE;
  103.  
  104. exit:
  105.     _retl (returncode);
  106. }
  107.