Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Re: Hash-Variablen auf existierenden Key prüfen
Autor: Arndt Lindner (80.150.206.---)
Datum:   27.05.22 11:14

Es gibt eine einfache Lösung für das Problem. Der Ausdruck:
 (sizeof(hashvar[]) > 0) && (sizeof(hashvar[key1$+Get("HashDel")+key2$+Get("HashDel")+key3$+Get("HashDel")+key4$+Get("HashDel")+key5$]) >= 0)
 

liefert das gewünschte Resultat.
Falls nicht alle Teilschlüssel bekannt sind, müsste man „wildcard“-Zeichen einfügen können. Dazu dient die folgende Prozedur. Als „wildcard“-Zeichen wird „*“ verwendet. Alle nachfolgend beschriebenen Prozeduren setzen voraus, dass die für Hash-Arrays standardmäßig vorgegebenen Delimiter verwendet werden. Für Keys sind Groß- und Kleinbuchstaben, Ziffern, der Punkt und der Unterstrich (_) erlaubt. Man kann die Prozeduren aber leicht an abweichende Gegebenheiten anpassen.
 proc HashKeyExists
   parameters hash hashvar[]          ' Weitere Parameter müssen nicht angegeben werden, da zum Zugriff $(i) verwendet wird
   declare longint i 
   var string hs = ""
     for i,2,%pcount                  ' baut den Suchstring für match$()
       if $(i) == "*"
         hs = hs + "[~.A-Za-z0-9_]*" + "~|"
       else
         hs = hs + $(i) +"~|"
       endif
     endfor
     hs = left$(hs,len(hs)-len("~|")) + chr$(254)
     clearlist
     move("ArrtoList",hashvar[])
     i = 0
     while (i < getcount(0)) && (match$(hs,getstring$(0,i)) == "")
       inc i
     endwhile
   return i < getcount(0)
 endproc
 

Eine Prozedur, die nicht nur feststellt, ob es den Schlüssel gibt, sondern alle zutreffenden Schlüssel in einer Liste zurückliefert, ist folgende:
 proc GetHashKeys
   parameters hash hashvar[]          ' Weitere Parameter müssen nicht angegeben werden, da zum Zugriff $(i) verwendet wird
   declare longint i, string rs, key, value 
   var string hs = ""
   var string rw = ""
     for i,2,%pcount                  ' baut den Suchstring für match$()
       if $(i) == "*"
         hs = hs + "[~.A-Za-z0-9_]*" + "~|"
       else
         hs = hs + $(i) +"~|"
       endif
     endfor
     hs = left$(hs,len(hs)-len("~|"))
     foreach hashvar[], key, value
       rs = match$(hs,key)
       case rs != "" : rw = rw + key + "\n"
     endfor
   return rw
 endproc
 

An dieser Stelle war die Lösung mit foreach … endfor etwas schneller als der Umweg über die Listboxliste.
Die Anzahl der gefundenen Schlüssel erhält man mit:
 proc GetAnzHashKeys
   parameters string keylist
   var longint rw = 0
   case keylist != "" : rw = len(keylist,"\n")-1
   return rw
 endproc
 

und dem Aufruf:
 anz = GetAnzHashKeys(GetHashKeys(hashvar[],"*",key2$,"*",…))
 


Gruß
Arndt

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Hash-Variablen auf existierenden Key prüfen  Neu
Jens-Arne Reumschüssel 12.03.22 09:08 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Arndt Lindner 13.03.22 13:22 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Heinz Brill 13.03.22 13:59 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Jens-Arne Reumschüssel 16.03.22 13:07 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Heinz Brill 16.03.22 17:20 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Arndt Lindner 27.05.22 11:14 
 Re: Hash-Variablen auf existierenden Key prüfen  Neu
Jens-Arne Reumschüssel 01.06.22 19:42 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org