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

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • 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
    TorStatus = {} 
    
    for i = 1, 10 do
        local ok
        ok, TorStatus[i] = EEPLoadData(i)
    end

    Einmal editiert, zuletzt von Goetz (21. Juni 2019 um 10:33)

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • als Tabelleninhalt möchte ich nur die Tornummern der freien Tore

    Das hast du im ersten der beiden Beispiele.

    Es erfüllt exakt die von die gestellten Anforderungen.

  • 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

    Es ist müssig, dauernd den Weltuntergang heraufzubeschwören. Man muss auch aktiv etwas dafür tun. :bn_1:

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • Die Tore 1 - 10 habe ich in den Slots 50 - 60 gespeichert

    Aber 1 + 50 ist nicht 50, sondern 51

    Außerdem sind die Slots 50 bis 60 insgesamt 11 Slots, nicht 10.

    Aber die Tore 1 bis 10 sind nur 10 Tore.

  • 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:

    Mein Equipment

    Win11 Pro (64) - 23H2_Build 22631.3374 (27.03.2024)

    NB 1 - 64 GB AS - i9-14900 HX Turbo: 5.4 GHz / 8 GB NVIDIA 4060, WHQ240Hz

    NB 2 - 64 GB AS - i7-10750 H Turbo: 5 GHz / 6 GB NVIDIA 1660Ti, FHD120Hz

    EEP : alle ab 4.0 - Installiert: 17.3 - Plugins: 1, 2 - TM (4.3.0.71), Hugo, Modellkatalog-VF1 & NR1-Helferleins

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • 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]

    4 Mal editiert, zuletzt von Goetz (21. Juni 2019 um 13:41) aus folgendem Grund: 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
    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
    if #freiesTor==0 then 
      print("alle Tore besetzt")
    else
      local AuswahlTor = freiesTor[math.random(#freiesTor)]
      print("Freies Tor: ", AuswahlTor)
    end

    :aq_1:

    eep_gogo ( RG3 )

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

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

    Einmal editiert, zuletzt von eep_gogo (RG3) (21. Juni 2019 um 13:37)

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • ... 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-17.0, HN13+15/16+15/16DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Zitat

    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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo

  • ... 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-17.0, HN13+15/16+15/16DEV, 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-17.0, HN13+15/16+15/16DEV, 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

    Gruß Reinhard

    Der Oldenburger :bd_1:

    EEP 9 - 17.2/2 | Home-Nos 17 und Blender 2.79 & 3.6 |Moodellkatalog | Bilder Scanner | Modell Explorer

    Desktop: Gigabyte Z790 Gaming | Intel i5-13600K | Corsair Venegance 32 GB DDR5 | Gigabyte GeForce RTX 4060 |1TB M.2 SSD + 2TB M. 2SSD + 2 x 1TB SSD

    LG 34WQ75X + Samsung S34J550WQR 3440x1440 | Win 11 Pro

  • 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
    EEP17.2 - Plug-in 1,2, Modell-Explorer, Zug-Explorer, Modell-Katalog, Tauschmanager, Hugo