Messages ausgeben in KRC 2

  • Hallo,


    ich habe ein Problem bei der Formatierung von Hinweismeldungen.


    Habe folgenden Code:



    Die Ausgabe funktioniert soweit dass er schreibt:


    "HINWEISMELDUNG_UP: Die Variable Parameter = 3 Parameter 2 = %2" (die variable Parameter wurde vorher im programm mit 3 initialisiert)


    Ich möchte nun aber dass er eben noch nen zweiten Wert hinschreibt anstatt der %2
    Dachte das wäre ähnlich wie in C so dass man bei

    Code
    SWRITE($MSG_T.PARAM[],STATE,OFFSET,"%d",Parameter,"%f",312.235)

    eben den typ schreibt (%d für decimal/integer) und dann den wert.. also %f für float und dann als Wert die 312.235
    des weiteren dann %s für nen String oder so?
    Funktioniert aber so nicht. :denk:


    Kann mir da jemand weiterhelfen?
    Gibt es eine Hilfe zu Messages mit der KRC 2? (Im Prog Handbuch für Experten find ichs nicht)
    Kann man auch gleich nen ganzen String übergeben und dfann sagen:


    Code
    DECL String bla="blablabla"
    $MSG_T.KEY[]=bla


    Hab auch noch was für nen Dialog gefunden mit:



    ich kann aber nicht für schreiben
    $MSG_T.PARAM[]=Parameter, 312.325,...


    Bin grad etwas verzweifelt weil nix was ich ausprobiere so funktioniert wie ich mir das vorstelle :bawling: was aber natürlich auch daran liegen könnte dass ich keine Hilfe dazu finde ;)


    Cya
    Thoms

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Thoms,


    Deine SWRITE Anweisung ist falsch.

    Code
    SWRITE($MSG_T.PARAM[],STATE,OFFSET,"%d",Parameter,"%f",312.235)


    sie müsste so aussehen

    Code
    SWRITE($MSG_T.KEY[], STATE, OFFSET, "HINWEISMELDUNG_UP: Die Variable Parameter = %d     Parameter 2 = %f", Parameter, 312.235)



    mfg
    Notime

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

  • Cool, funktioniert!


    Mit String/%s funktionierts auch aer leider nur so halb


    was nicht funktioniert ist

    Code
    SWRITE($MSG_T.KEY[], STATE, OFFSET, "MSG_UP: V1= %d V2= %f String: %s", Parameter, 312.235, "abc %d", 12)


    Man kann also leider nicht schachteln.
    Die Ausgabe ist dann "MSG_UP: V1= 3 V2= 312.235 String: abc %d"


    Aber danke für deine Hilfe.
    Wenn mir jetzt noch einer sagen kann wozu ich dann den $MSG_T.KEY[] brauche... :denk:


    LG

  • Hallo Thoms,


    ein Parameter in Parameter funtioniert nur über den Umweg durch SWRITE.


    also entweder

    Code
    sParam1[]=SWRITE(sParam[], STATE, OFFSET, "abc %s", 12)
    SWRITE($MSG_T.KEY[], STATE, OFFSET, "MSG_UP: V1= %d V2= %f String: %s", Parameter, 312.235, sParam1)


    oder

    Code
    SWRITE($MSG_T.KEY[], STATE, OFFSET, "MSG_UP: V1= %d V2= %f String: %s %d", Parameter, 312.235, "abc", 12)


    Gruß
    Notime

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

  • Hallo, ich habe ein neues Problem was damit zu tun hat:


    habe folgenden code:



    dabei tritt erstmal folgendes problem auf:
    zeile 1: Parameter nirgends deklariert
    zeile 3: Keine Feldgrenzen in Parameterspezifikation zulässig
    zeile 25: Name nicht als Feld vereinbart SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[])


    wenn ich in der zeile 3 die feldgrenzen raus lasse, also: DECL CHAR Parameter[] dann bringt er mir zwar keine fehler aber sagt mir dann als STOP: Speicherbedarf für Parameterliste zu hoch :waffen100:


    des weiteren habe ich dann in einem anderen programm einen string definiert bei dem das geht


    in der dat:

    Code
    DECL CHAR sVerloren[50]


    in der src:

    Code
    sVerloren="Sie haben verloren!"
    
    
    heinweismeldung (sVerloren)


    Fehlermeldung: Typ aktueller/formaler Parameter nicht verträglich


    wo ist das problem? sind doch beides strings..
    und

    Code
    hinweismeldung ("sie haben verloren")


    bringt die gleiche fehlermeldung.



    des weitern: wenn ich beim ersten problem die deklaration in die dat verschiebe:


    also

    Code
    DEFDAT hinweismeldung PUBLIC
    
    
    DECL CHAR Parameter[50]
    
    
    ENDDAT


    dann sagt er mir bei der dat als fehlermeldung:
    zeile 2: ENDDAT Satz nicht vorhanden :waffen100:


    wäre schön wenn jemand helfen kann

    Einmal editiert, zuletzt von thoms ()

  • Also ich glaube das erste Problem hab ich gelöst:


    Es muss heißen:

    Code
    DEF heinweismeldung (Parameter[50]:IN)
    ...
    DECL CHAR Parameter[]
    ...
    SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[])  
    ...


    Allerdings immernoch das Problem in dem anderen Programm dass aktueller/formaler Parameter nicht vertäglich sind :(

  • AHHHHH.. ich werd hier noch blöde!!! :wallbash: :wallbash: :wallbash:
    Jetzt sagt er mir nicht mehr dass die Parameter nicht verträglich sind - jetzt ist hinweismeldung angeblich nicht als Unterprogamm vereinbart.. AHHHHH :wallbash: :wallbash: :wallbash:


    :hilfe::bawling::bawling::bawling::hilfe:

  • Sooo.. die Endmeldung:


    Es funktioniert. Und die Lösung ist ziemlich trivial.
    Es geht mit Definition:

    Code
    DEF hinweismeldung (Parameter[]: OUT)
    ...
    CHAR Parameter []
    ...
    SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[]
    ...


    Wichtig ist hierbei dass dort OUT und nicht IN steht --> fragt mich aber bitte nicht warum das so sein muss...
    Aufruf:

    Code
    DECL CHAR Meldung[50]
    ...
    Meldung[]= "es funktioniert"
    hinweismeldung(Meldung[])


    Was nicht funktioniert ist Aufruf:

    Code
    ... hinweismeldung ("es funktioniert nicht")


    Schade dass man an sich selber kein "Danke" schicken kann ;)

  • Was nicht funktioniert ist Aufruf:

    Code
    ... hinweismeldung ("es funktioniert nicht")


    Weil da ein OUT steht.


    Ich hab zuletzt das hier verwendet:


    und hat eigentl. funktioniert... :denk:


    Grüße,
    Michael

  • Hmm, also ich habs bei meinem mit IN ausprobiert, da bringt er mir nen Fehler. Welchen weiß ich nicht mehr.
    Hab deins nicht abgepinselt, nur bei meinem anstatt dem OUT das IN rein geschrieben.


    Naja, ist aber auch nicht weiter tragisch. Mach ichs eben über den Umweg den Text erst in ein CAHR-Feld zu schieben und dann auszugeben. Die zwei Zeilen mehr machens auch nicht mehr fett ;) ... danke trotzdem.


    Vielleicht pinsel ich deins bei gelegenheit mal ab und probiers damit.


    Gruß Thoms

  • Hallo zusammen,


    ab KSS Version 8.x sprich bei KR C4 müssen Array-Übergabeparameter als OUT (Call by reference) deklariert werden.



    Grüße
    notime

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

  • Was aber ausdrücklich CHAR-Strings nicht betrifft.



    Grüße,
    Michael

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden