Lua-Tabelle aus Speicher-Slots-Inhalten füllen

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
  • Liebe Lua-Experten,


    ich habe eine Spedition mit 10 Toren gebaut und die Besetztmeldung vor den Toren in Slots gespeichert (0 = Frei, 1 = Besetzt): z.B. Slot[1] = 0, Slot[2] = 1, Slot[3] = 1, Slot[4] = 1, Slot[5] = 0, Slot[6] = 0, Slot[7] = 1, Slot[8] = 0, Slot[9] = 1, Slot[10] = 1.

    Daraus möchte ich zwei Tabellen befüllen: local freiesTor = {} und local besetztesTor = {}.

    Diese müssten dann nach obigem Beispiel lauten: local freiesTor = {1,5,6,8} bzw. local besetztesTor = {2,3,4,7,9,10}.

    Wie kann ich das erreichen, um dann z.B. mit local auswahlTor = math.random(#freiesTor) zufällig ein freies Tor auszuwählen?


    Für den entsprechenden Tipp wäre ich euch dankbar.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • Du könntest es zum Beispiel so machen:


    Aber ich würde das nicht auf zwei Tabellen verteilen. Denn dann musst du bei Änderungen beide Tabellen ändern. D.h., du musst die entsprechende Nummer aus der einen Tabelle entfernen und der anderen hinzufügen.


    Ich würde dir empfehlen in einer einzige Tabelle für die zehn Tore den jeweiligen Status zu speichern.


    LUA Source Code
    1. TorStatus = {}
    2. for i = 1, 10 do
    3. local ok
    4. ok, TorStatus[i] = EEPLoadData(i)
    5. end
  • Lieber Goetz,


    als Tabelleninhalt möchte ich nur die Tornummern der freien Tore und nicht den Status bekommen. Den Status habe ich ja in den Slots.

    Wenn ich dann ein freies Tor per Zufall bekomme, kann ich die entsprechende FS schalten, indem ich EEPSetSignal(SignalID, Zufallstor+1) setze.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • Und trotzdem.

    Daraus möchte ich zwei Tabellen befüllen: local freiesTor = {} und local besetztesTor = {}.

    Die Tabelle besetztesTor ist obsolet.

    Jedes Tor, das nicht frei ist, ist besetzt.

    Wozu den Verwaltungsaufwand für das besetzte Tor treiben? Selbst dann, wenn er klein ist.


    :aq_1:Gruss Jürg

    Samsung Series 9 Laptop / Lenovo Z50 - 70 Laptop
    Intel i5 1.7 Ghz / Intel i7 2.0 Ghz
    4 Gb Speicher / 8 Gb Speicher
    Intel HD Graphics 4000 / NVIDIA Geforce 840M
    Windows 10 64 /Windows 10 64
    EEP16 / EEP14, EEP15
    AnlagenBau / AnlagenLaufLass

    _____________________________________________________________________

    Geisterbahn

  • Ich habe jetzt folgende Funktion geschrieben (Die Tore 1 - 10 habe ich in den Slots 50 - 60 gespeichert):

    Wenn ich die Funktion über einen KP aufrufe, erhalte ich als Ergebnis auch Tore, die besetzt sind.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • Die Tabelle besetztesTor ist obsolet.

    ...betreffend "Patsch" : - sollte man nicht sein Privatleben aus EEP ( u.ä. ) heraushalten ?


    :ap_1::bh_1:

    Freundliche EEP-Grüsse,

    Volker. :aq_1:

    Win10Pro (64) - 1909 (19H2)_Build 18363.592 - 16GB AS - i7-4720HQ Turbo: 3,5 Ghz / 3 GB NVIDIA 970M
    EEP : alle ab 4.0 - Installiert: ( 15.1 - Patch 2 - Plugin 1 ) - EEP 16.1 - Patch 2 & PlugIn 1 / Hugo, Modellkatalog

  • Hatte mich verschrieben. Slot[51] ist Tor 1 und Slot[60] ist Tor 10.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • wenn alle Tore besetzt sind, bekomme ich eine Fehlermeldung: ...bad argument #1 to ´random´ (interval is empty)

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • wenn ich nur Tor 10 frei habe, bekomme ich die Meldung: Freies Tor: 1


    wenn ich nur Tor 1 und 10 frei habe, bekomme ich die Meldung: Freies Tor: 1 bzw. Freies Tor: 2 im zufälligen Wechsel.

    Das heißt, ich bekomme aus der Anzahl freier Tore eine Zufallszahl.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • Ach, jetzt sehe ich dein Missverständnis.


    Mit math.random(#freiesTor) bekommst du eine Zufallszahl zwischen 1 und der Anzahl Elemente in deiner Tabelle.


    Wenn in deiner Tabelle freiesTor das hier steht

    {5, 7, 8, 10}

    dann bekommst du mit #freiesTor eine 4 weil die Tabelle vier Elemente enthält.

    Und mit math.random(#freiesTor) bekommst du eine Zahl zwischen 1 und 4.


    Du willst dann das Element mit dieser Nummer ausgeben.

    Also nicht AuswahlTor, sondern freiesTor[AuswahlTor]

    "Your heart's not in this, is it?"

    - Andy Millman -

    The post was edited 4 times, last by Goetz: kleine Schreibfehler korrigiert ().

  • Schorsch  

    ich bin jetzt nicht auf dem aktuellen Stand deines Skripts, bisschen konfus :ao_1::ao_1:


    aber:


    1) deine Zeile #13 aus Beitrag #6 müßte heißen :

    Code
    1. 13: local AuswahlTor = freiesTor[math.random(#freiesTor)]

    denn deine Zufallsauswahl läuft ja über den Index/Tabellenlänge


    2) das Problem bei "alles besetzt" aus #10 fängst du so ab:


    Code
    1. if #freiesTor==0 then
    2. print("alle Tore besetzt")
    3. else
    4. local AuswahlTor = freiesTor[math.random(#freiesTor)]
    5. print("Freies Tor: ", AuswahlTor)
    6. end

    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-15, HN13+15+15DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

    The post was edited 1 time, last by eep_gogo ().

  • So funktioniert es. Jetzt ist nur noch die Frage, was ich machen soll, wenn die Rückmeldung kommt ...bad argument #1 to ´random´ (interval is empty), weil alle Tore besetzt sind.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • ... siehe #13 :as_1::as_1: mein Hinweis 2) :at_1::at_1:


    es kommt kein Fehler, weil du bei "besetzt" eben NICHT mehr abfragst.


    Du kannst dir zwischen Zeile #2 und #3 eine Variable/Merker für "besetzt" setzen, die du dann an anderer Programmstelle verwenden kannst.

    Musst sie dann zwischen Zeile #3 und #4 natürlich wieder löschen!! :ae_1:


    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-15, HN13+15+15DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Quote

    2) das Problem bei "alles besetzt" aus #10 fängst du so ab:

    Das klappt leider noch nicht. Es erscheint trotzdem ...bad argument #1 to ´random´ (interval is empty)

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog

  • ... kann (logisch) so aber nicht sein , ausser du hast dein "random" nochmal woanders,


    dann bitte ich dich doch deinen aktuellen Codeausschnitt, wie in #6 nochmals einzustellen, sonst wird das ganze zu konfus :at_1:


    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-15, HN13+15+15DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • ... da ich mich in solchen Fällen meist mit kleinen Tests "absichere" :bn_1:

    2 Bilder, dass mein Code funktioniert:


    Tore frei:

    -----


    alle Tore besetzt:

    ----

    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-15, HN13+15+15DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Hallo Schorsch


    Es gibt noch eine weitere Möglichkeit


    EEPStructureSetTagText ( _Speicherplatz , _TagText )

    EEPStructureGetTagText( _Speicherplatz )


    da kannst du gleich in den Objekten ( nicht bei Signale ) eintragen

    Reinhard

    Der Oldenburger :bd_1:

    EEP 6 Pro/9.1/10/11/12/13/14/15 Plugin1/16 Plugin 1|Home-Nos 5/8/13/14/15|Moodellkatalog|Bilder Scanner|Modell Explorer

    Desktop:Gigabyte Z270-HD3P|Intel i5-7400|Corsair Venegance 16 GB DDR4|Gigabyte GeForce GTX 1050Ti|1TB SSD + 3x 1TB HD

    Samsung SyncMaster S27D390 + Samsung SyncMaster P2450|Win 10 Pro

    Laptop Acer Aspire E17|17 Zoll FullHD|i5-6200U|12 GB DDR4|GeForce 940mx 2GB DDR5|256GB SSD|1TB HD|Win 10 Home

    Mein youtube Kanal

  • Jetzt hab ich es. Ich hatte die if-Bedingung zum Abfangen, wenn alle Tore besetzt sind, an der falschen Stelle. Meine Funktion sieht jetzt so aus:

    Die Tabelle besetztesTor nutze ich z.Z. nicht. Danke für eure Hilfe.

    LG
    Schorsch


    -------------------------------------------------------------------------------------------------------------------------
    PC: 64-Bit, Windows 10 Home, Intel(R) Core (TM) i7-8700 K CPU@3,70 GHz, Arbeitsspeicher 32 GB, NVIDIA GeForce GTX 1080 Ti

    Laptop: acer 64 Bit, Win 10, 32 GB RAM, Intel(R) Core (TM) i7-6820 HK 2.7 GHz, NVIDIA GeForce GTX 980
    EEP11 bis EEP 16.1 Plugin 1, Modelexplorer, Zugexplorer, Modellkatalog