Beiträge von BugFix

    allerdings meckert VSCodium:


    "message": 'setFocus' is declared but not used [XDeclaredButNotUsed]

    Das hat mich auch gewundert.

    Ich will grundsätzlich nichts ausschließen und halte es deshalb für möglich, dass diese proceure in den Tiefen der Includes doch schon existiert (aber dokumentiert habe ich es nicht gefunden). Somit wäre sie doppelt - und deshalb "nicht genutzt" ?

    Die Funktion hatte ich schmerzlich vermisst. Deshalb habe ich sie mir erstellt.


    GELÖST


    So, bin nun auf kleinem Umweg zum Ziel (Objekt) gelangt. Wobei ich hier nur die Fehlerinfos in das Objekt lade, die anderen Nodes sind ja direkt abfragbar.


    Code: Console
    102, BatteryErrBla
    @["dev A", "dev B", "dev C"]
    ----------------------------------------
    102, BatteryErrBlub
    @["dev D", "dev E", "dev F"]
    ----------------------------------------

    OK, ich löse das Problem nun anders. Die Verschachtelung der error_list konnte von der json Funktion nicht geparst werden, ich bekam ein Objekt mit einem leeren Array.

    Somit habe ich das um eine Stufe "entschachtelt" und führe den Error-Code in jedem Error-List Objekt mit.


    Fehlt dir in Zeile 18 deines Json strings nicht ein ","? Wobei das natürlich ein Copy/Paste Fehler sein kann, da du ja sicher mit anderen Daten arbeitest.

    Kann sein, dass ich den Wald vor lauter Bäumen nicht sehe.

    Zeile #18 des JSON ist doch Code-Zeile #43


    43    ],

    44 "error_list": {
    45 "101": [


    Da ist doch ein Komma. Oder wo meinst Du? Gib mal die Codezeile an oder kopiere die Zeile hier rein.

    EDIT #3: Lösung mit geänderter JSON-Struktur hier: Post #4

    Lösung mit Überführung in Objekt hier: Post #7


    Ich hatte hier auf meine JSON-Datei verwiesen.

    Die Umsetzung in mein Projekt soll in Nim erfolgen.


    Ich habe die Struktur der JSON-Datei mal heruntergebrochen auf ein Minimum:


    Die Nim JSON Library bietet die Möglichkeit, die geparsten JSON-Daten in ein Objekt zu überführen.

    Somit habe ich auf obiger Struktur aufbauend meine Datentypen erstellt.

    Hier mal meine Testdatei mit minimalem JSON-Musterdatensatz:


    Grundsätzlich ist die Überführung verschachtelteter Strukturen in ein Objekt möglich: Nim: How to parse nested JSON into objects

    Im dortigen Bsp. sind jedoch alle Daten fix.

    Ich habe jedoch in allen Arrays eine veränderliche Anzahl von Einträgen, deshalb die Nutzung von "openArray". Und hier liegt das Problem. Gleich beim ersten Auftauchen fliegt es mir um die Ohren:


    In einem ersten Versuch hatte ich statt "openArray[string]" mit Sequences gearbeitet. Nur schlägt auch das fehl, weil der JSON-Parser wohl erkennt, wenn Daten in einem Array vorliegen und die Übernahme in eine Sequenz ablehnt. - Fehlermeldung (Compile) war in etwa: "Type is seq[string] but array found".


    Wie komme ich nun am besten aus der Situation raus?

    Momentan fiele mir nur ein: Statt "openArray" mit "array[string,FIXE-ZAHL]" zu arbeiten und alle Einträge in der JSON-Datei entsprechend mit Leerwerten auffüllen.


    Also wenn ihr Ideen habt: Gern her damit.


    EDIT:

    OK, in der Beschreibung zur Funktion to steht es auch

    Zitat

    Known limitations:

    Heterogeneous arrays are not supported.

    Dann muss ich mich wohl doch von Node zu Node hangeln.


    EDIT #2:

    Hmm, ein weiteres Problem

    Mit dem JSON-String aus obigem Code

    Nim
    let 
      obj_json = parseJson(err_json)        # JSON String parsen
    
    echo obj_json["version"].getStr()


    Führt zum Fehler bei der Ausführung:

    Code
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(931) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(847) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(815) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(818) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\parsejson.nim(526) eat
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\parsejson.nim(522) raiseParseErr
    Error: unhandled exception: input(36, 15) Error: ] expected [JsonParsingError]

    Die Zeile, bevor der Error geworfen wird ist: eat(p, tkBracketRi)

    Nach meinem Verständnis ein Fehler: Schließende Klammer nicht gefunden. Aber die Klammerzuordnung ist korrekt im JSON-String.


    Großes :?:

    Es kommt zwar drauf an, wie viele Geräte du generell verwerwaltest,... Aber ich würde in Erwägung ziehen, die Infos nach Gerät zu speichern und dann ggf. alle durchiterieren, um die Geräte zu finden, die die Fehlermeldung haben.

    Selbst wenn du 10000 Geräte hast dürfte das durchlaufen nicht lange dauern.

    Der Hinweis ist grundsätzlich richtig. Ich hatte aber nicht erwähnt, dass es hier nur um Gerätetypen allgemein geht. Also nicht für jedes (mit Seriennnummer identifizierbare) Gerät werden Fehlercodes gespeichert, sondern nur über den Artikel als solchen. Und diese Anzahl ist bei uns überschaubar, so etwa 50-60 Artikel sind betroffen. Die Anzahl der relevanten Fehler ist bei etwa 30 - 40 pro Gerätetyp.


    Ich habe bei einigen Fehlercodes 2 max. 3 unterschiedliche Bedeutungen. Somit ist der Aufwand (s. Bsp.) auf 2 oder 3 Einträge begrenzt.

    Eine Speicherung mit PrimärKey=Gerätetyp würde für jeden Eintrag aus dem Array "device" einen Eintrag erfordern mit allen anderen Angaben. Der obige Eintrag wäre dann doppelt so umfangreich und voll unnötiger Redundanzen.


    Meiner Meinung nach ist die bisherige Variante für meinen Anwendungsfall passend.

    Trotzdem Danke für die Investition deines Gehirnschmalzes. 8o

    Ich möchte die Fehlerkataloge verschiedener Geräte in eine JSON-Datei überführen und damit eine Software füttern, mit der auch unsere Innendienstmitarbeiter telefonisch eine erste Diagnostik vornehmen können.

    Meine Idee ist, dass der User den Fehlercode eingibt, Geräte die diesen Code verwenden angezeigt bekommt und dann für die weiteren Informationen das korrekte Gerät auswählt (bzw. dies im Dialog mit dem Kunden tut - das für den Fall, dass gerade kein Zugriff auf die Kundendaten möglich ist - z.B. tel. Notdienst).


    Hier mal zwei fiktive Codes, die aber z.T. unterschiedliche Bedeutung haben können (je nach Gerät):


    In JSON würde ich das jetzt so anlegen:


    Ist das in der Form korrekt?

    Vom Ablauf her sieht das ja soweit OK aus (ich weiß nur nicht, warum die Sleep darin sind).

    Ich würde es etwas anders gestalten:


    Wegen der Remote-Verbindung beachte das Edit in Post #4.

    Da du nur einen Lese- und einen Schreibvorgang hast, spar dir FileOpen und verwende einfach den Dateipfad für Read/Write. Dann hast auch keine Probleme mit den Flags.


    Edit:

    Das dein Text gelöscht wird, liegt daran, dass du im gemeinsamen Read/Write anders vorgehen musst.

    Zitat

    When reading and writing via the same file handle, the FileSetPos() function must be used to update the current file position.