SizeOf() mit Hash_Array

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Hallo,
    warum gibt der folgende Quelltext "4" aus, müsste es nicht -2 sein?


    Code
    declare p$, hash test[]
    cls
    p$="Problem"
    Print SizeOf(test[p$])
    waitinput

    Oder anders gefragt, wie kriege ich raus ob das Element p$ existiert?


    Nachtrag: Sobald irgendein beliebiges Element angelegt ist scheint es zu funktionieren. Aber auch nicht immer. Manchmal kommt bei der SizeOf-Anfrage ein Absturz mit "Dieses Element existiert nicht".

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

    2 Mal editiert, zuletzt von Jac de Lad ()

  • Oder anders gefragt, wie kriege ich raus ob das Element p$ existiert?

    Das Sicherste wäre, durch die Hash-Tabelle zu iterieren.



  • @'p. specht@'H.Brill': Ja das geht beides, aber das erste ist schon ziemlich ungewöhnlich und zweite Beispiel macht mein Programm wieder langsam.


    Laut Hilfe müsste meine Version ja auch gehen, bzw. sollte es genauso gemacht werden.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Das Problem liegt wohl daran, daß du keine Einträge im Hash-Array hast.
    Das hat Roland wohl so nicht berücksichtigt.
    Wenn du ein

    Code
    SetSize test[], 1

    vor deine SizeOf() - Abfrage machst, funktioniert es.
    Aber warum in aller Welt brauchst du ein Hash-Array,
    das du nicht füllst ? Dein Testcode oben ist ja ziemlich
    sinnlos.


    Also bei mir funktioniert das mit einem gefüllten Array,
    auch in einer WhileLoop Schleife von 100 Durchläufen.
    Kein einziger Absturz.


    PS: Wieviel Einträge hast du denn, daß es zu langsam ist ?

  • 1170 und mehr. Aber SetSize könnte ja erstmal ein funktionierender Workaround sein. Ich probiere es aus.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Klappt nicht immer.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • RGH: Ist das jetzt ein Bug oder sehe ich was falsch. Mit wilden Konstruktionen die irgendwelche Fehler abrufen komme ich auch nicht wirklich weiter und es ist sehr unschön.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Hallo Roland, ist eventuell schon was rausgekommen?

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Hab Roland kontaktiert, aber leider mich keine Antwort erhalten.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Letzter Versuch: ROLAND!!! Hast du was für mich?

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Nein, ich hatte noch keine Gelegenheit, da tätig zu werden. Im Moment bin ich privat sehr gefordert.


    Gruß
    Roland

    (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
    AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


    http://www.xprofan.de

  • Hallo Roland,
    darf ich das Thema nochmal ansprechen?

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Ich habe einfach mal eine Funktion erstellt und dein Hasharray übergeben.
    Die Leerform funktioniert und liefert 0.
    Die 2.Form liefert falscher Typ.


    Also musst Du zuerst das Array beleben.
    If SizeOf(test[]) = 0 sagt also: Da muß zuerst etwas hinein.


    Danach liefert test["prob"] bei nicht Vorhandensein SizeOf(test["prob"]) ein -2



    Hoffe es hilft

  • Ah danke. Das probiere ich aus.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Code
    Declare hash pointer[]
    CLS
    Print SizeOf(pointer["hallo"])
    WaitInput

    7?

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Ich denke, daß Roland da nachbessern sollte.
    Das SizeOf bei den anderen normalen Arrays
    gibt ja die Anzahl der Elemente zurück und
    beim Hash - Array die Länge des entsprechenden
    Hashes.
    Die Länge des Hashes bekommt man genauso gut
    mit

    Code
    print Len(a["apfel"])

    heraus. Da wäre eine extra Funktion auf die Existenz eines
    Eintrages (oder Variable lt. Hilfe) besser, um nicht durch das
    ganze Hash-Array zu iterieren, zumal Roland das schon bei
    SizeOf() umgesetzt hat.


    Vielleicht hat Roland ja wegen der Corona - Krise etwas mehr Zeit,
    sich das anzusehen.

  • Nicht ganz. Das Element existiert nicht und der Rückgabewert ist die Länge des Variablenbezeichners. Wenn ich statt pointer zum Beispiel temp nehme, dann ist das Ergebnis 4.
    So oder so, sobald das Array mindestens ein Element hat klappt es....aber nicht in meinem Programm mit fast 8000 Zeilen. Ich lösche das Array mit clear, setze ein Dummyelement rein und wenn ich nach einem nichtexistenten element Frage kommt Fehlermeldung 223; Element nicht vorhanden. Kommen sollte aber -2. So hab ich das jedenfalls verstanden.

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
    TerraMaster F4-420 mit 14TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net

  • Vielleicht mal so am Rande :
    Man sollte Schlüsselwörter für Programmiersprachen
    nicht als Variablen verwenden. In deinem Falle wäre
    das


    POINTER


    Pointer ist eine Variablenbezeichnung, genauso wie
    Long, String, Integer oder Memory usw.
    Sowas kann immer mal zu Irritationen führen, egal
    welche Sprache man benutzt.