Seltsames Verhalten bei Multiplikation im Script

Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Guten Abend allerseits!


    Ich habe aktuell ein Problem und stehe am Ende mit meinem Programmierer-Latein... Es geht um folgendes:

    Ich arbeite momentan am IBIS-Script, genau genommen an der Linieneingabe. Alles funktioniert soweit, Linie samt Präfix kann eingegeben werden und es funktioniert auch alles, bis auf eine Funktion: Wenn als Präfix 0 eingegeben wird und die Eingabe vierstellig ist, ist die Liniennummer denmach dreistellig (Präfix 0=kein Präfix/Suffix für Liniennummer). Allerdings funktioniert hier die Umrechnung für die Matrix nicht korrekt.


    Fehlerbild: Eingabe Liniennummer hier 0255 (Linie 255). Die Matrix schildert allerdings nur 55.

    Wenn ich mir jetzt die Variablen-Werte in der lastsn anschaue, sehe ich das hier:

    Code
    IBIS_Linie
    255.999996669723
    IBIS_LinieKurs
    255.999996669723
    IBIS_Linie_Complex
    5599.99998083727
    IBIS_Linie_Suffix
    0

    Der dazugehörige Code-Ausschnitt:

    Code
    (L.L.IBIS_input) (S.L.IBIS_LinieKurs) $IntToStr 1 $cutBegin $StrToFloat (S.L.IBIS_Linie) s0
    'Kompatibilität mit anderen Matrixscripts herstellen (=*100+Übersetzen für Suffix; ganz seltsamer Bug: bei Linieneingabe 0 wird die
    'Multiplikation mit 100 zu -100, obwohl IBIS_Linie 0 ist...):
    l0 100 * (S.L.IBIS_Linie_Complex)
    -100 =
    {if}
    0 (S.L.IBIS_Linie_Complex)
    {endif}

    Es geht hier um die Variable IBIS_Linie_Complex, die ja ganz offensichtlich falsch geschrieben wird.


    Ich möchte das IBIS-Script möglichst kompatibel mit anderen Matrix-Scripts (halt solche, die mit dem standard-IBIS-Script arbeiten können) ist, und dementsprechend brauche ich da die Umrechnung.


    Hat da jemand eine Idee?

  • Anzeige
  • Der kleinst mögliche Präfix sollte doch eigentlich 00 sein und nicht 0. Also muß die Eingabe der Liniennummer immer 5-stellig sein. So wird aus der Linie 25500 die Linie 255 und der Buchstabencode. Je nach eingestellten Code, wird ein Buchstabe voran gestellt oder angehangen.

    in der lastosc wird in zwei Punkten, die Liniennummer und der Präfix gespeichert. Also du siehst bereits die Linie 255, aber der Präfix kann nicht gespeichert werden, weil der Wert 0 nicht existent oder unzulässig ist. Du hast vermutlich die Längenangabe des Stringvariable auf 4 Stellen gekürzt. Aber vergessen, das die 4-stellige Stringvariable nur maximal 4 stellen haben darf. Eine vorgestellte 0 bedeutet eine zweistellige Liniennummer. Eigentlich dürfte nur die Linie 25 angezeigt werden. Hast du die Eingabe des Präfix vorgezogen? Denn in den meisten bisherigen Liniennummerneingaben, ist die Eingabe: Liniennummer+Präfix.

    l0 100 * (S.L.IBIS_Linie_Complex)

    Hier wird der Präfix abgefragt (multiplikation mit 100 = Zahlen zwischen 00 und 99). Der Zahlencode wird hier gespeichert, nicht der Buchstabe. Im nächsten Frame wird die Zahl mit dem eingetragenen Code gewechselt und der Buchstabe wird gespeichert. In der Last.osc bleibt der Zahlencode gespeichert, nicht der Buchstabe. Der Buchstabe wird neu ausgelesen und zur Liniennummer gestellt, je nach eingestellten Code (Voranstellen oder Anhängen). Hier geht es auch um die Länge der Liniennummer. Man kann in einem Code auch zwei Buchstaben eintragen. Beispiel: TE. Mit der Liniennummer 255 ergibt sich eine Überlänge. Der Standardwert steht auf 3 Stellen der Liniennummer. Also ein Buchstabe und 2 Liniennummern oder zwei Buchstaben und eine Liniennummer. Bei der Linieneingabe 255 mit einem Präfix, wird die Liniennummer verändert. So steht am Ende die Linie X25 oder Linie 55X.

  • Der kleinst mögliche Präfix sollte doch eigentlich 00 sein und nicht 0. Also muß die Eingabe der Liniennummer immer 5-stellig sein.

    Nein, Einstellig ist schon richtig so (0-9 bzw. 1-9, wenn die 0 für eine dreistellige Liniennummer reserviert ist).

    Hast du die Eingabe des Präfix vorgezogen? Denn in den meisten bisherigen Liniennummerneingaben, ist die Eingabe: Liniennummer+Präfix.

    Korrekt, Eingabe läuft so ab: xyy(y); x ist hier der Präfix, yy(y) die Liniennummer. Das funktioniert auch alles, jeder Präfix wird von der Matrix auch übernommen.

    Hier wird der Präfix abgefragt (multiplikation mit 100 = Zahlen zwischen 00 und 99). Der Zahlencode wird hier gespeichert, nicht der Buchstabe

    Ich bin mir gerade nicht sicher, was du damit meinst. Der Präfix selbst ist nur bei der Eingabe voerhanden, wird dann allerdings nach der Eingabe, zusammen mit der Liniennummer, auf zwei Variablen aufgeteilt, eben IBIS_Linie-Complex (Liniennummer) und IBIS_Suffix (Präfix).

  • wenn die 0 für eine dreistellige Liniennummer reserviert ist

    das geht icht, solange du die 0 nicht seperat als Präfix ausgeschlossen hast. Dann gelten die Ziffern 09, statt 1-9.



    Ich bin mir gerade nicht sicher, was du damit meinst.

    Der Präfix wird mit 100 multipliziert, so das ein zweistelliger Präfix als dreistelliger Code, unabhängig von der Liniennummer ausgelesen werden kann. Dann wird nur die 1 bei der 100 entfernt und der zweistellge Präfix, als Code für den Buchstaben rausgesucht. Du müßtest also die Mutiplikation entfernen, damit das Script nicht nach einem zweistelligen Buchstabencode sucht.

  • Der Präfix wird hier nirgendwo irgendwie multipliziert, der ist in einer extra Variable gespeichert. In IBIS_Linie_Complex wird die Liniennummer gespeichert. Der Suffix aus der Variable ist dem Matrixscript auch komplett egal, das zieht sich den Suffix aus der Variable IBIS_Linie_Suffix.


    Hier mal der ganze Auszug aus der Verarbeitung der Eingabe:

    Das Gegenstück der Matrix:




    Aber wie bereits oben beschrieben, dürfte es was in der Zeile haben:

    Code: IBIS-Script
    l0 100 * (S.L.IBIS_Linie_Complex)

    Hier das *100 durch ein *10 zu ersetzen ergibt das gleiche Ergebnis, nur halt dreistellig statt vierstellig.

  • An

    Code
    l0 100 * (S.L.IBIS_Linie_Complex)

    selbst wird es eher kaum liegen. Du musst vorher im Verlauf der Eingabenverarbeitung einen Schnitt haben, der vorne die 2 komplett wegcutet. Daher wäre es nett, wenn du die ganze "Methode" mal hochladen bzw hier als quellcode angeben könntest. Z.B. hast du dort String Operationen drin, die man mit deinem Ausschnitt nicht komplett nachvollziehen kann. Es wäre vlt auch mal empfehlenswert statt l0 eine variable zu verwenden, die den eingabewert auf alle fälle beinhaltet. Bedenke auch, dass eine 0 am Anfang einer INT eingabe immer verschwindet, da diese unwichtig für den Wert einer Zahl ist.

  • Es wäre vlt auch mal empfehlenswert statt l0 eine variable zu verwenden

    -> Variable "IBIS_Linie".

    Z.B. hast du dort String Operationen drin, die man mit deinem Ausschnitt nicht komplett nachvollziehen kann.

    Sind für den aktuellen Fall eher irrelevant, die dienen dazu, um die erste Stelle zu entfernen, wenn die eben >0 ist. An denen kann es aber auch nicht liegen, weil eine zweistellige Linie mit dem Präfix 0 eben funktioniert.

    Daher wäre es nett, wenn du die ganze "Methode" mal hochladen bzw hier als quellcode angeben könntest

    Der oben angegebene Code ist (bis auf die IBIS-Modus-Abfrage) der komplette (hier relevante) Code.

  • Mit Präfix:

    Code
    IBIS_input
    428.999990862414
    IBIS_Linie
    29.0000005756879
    IBIS_LinieKurs
    428.999990862414
    IBIS_Linie_Complex
    2900.00005756879
    IBIS_Linie_Suffix
    5.9999999058405

    Ohne Präfix, zweistellig:

    Code
    IBIS_input
    21.9999993111511
    IBIS_Linie
    21.9999993111511
    IBIS_LinieKurs
    21.9999993111511
    IBIS_Linie_Complex
    199.99999686135
    IBIS_Linie_Suffix
    0

    Ohne Präfix, dreistellig:

    Code
    IBIS_input
    219.999993111511
    IBIS_Linie
    219.999993111511
    IBIS_LinieKurs
    219.999993111511
    IBIS_Linie_Complex
    1999.9999686135
    IBIS_Linie_Suffix
    0

    Mir ist gerade aufgefallen, dass die zweistellige Eingabe ebenfalls den selben Fehler wirft.