Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich habe eine Tabelle, aus der ich eine Art Listenbetrieb mache. Mithilfe dieses Forums habe ich das schon ganz gut hinbekommen. Jetzt habe ich nur ein kleines Problem. Wenn ich die Liste mit 5 Werten befüllt habe und sie abarbeite und ich dann im nächsten Durchlauf nur die ersten 3 Werte haben will, wie genau lösche ich dann die Werte 4 und 5? Wenn ich sie einfach lösche, wird 0 definiert, so dass ich im nächsten Durchlauf immer eine Schleife von 5 und nicht wie gewünscht von 3 habe.
Gibt es eine Möglichkeit, statt der "0" das Feld so leer zu machen, dass es nicht angesprochen wird? Geht das mit "null"? Und wenn ja, wie mache ich das?
Ja, ich weiß, bei meinem Beispiel mit dem Tank ist es egal, ob 0 Liter nachgefüllt werden, aber man möchte das Programm ja auch so schlank wie möglich gestalten ohne sinnlose Extrarunden.
LG Christina
Anzeige
15.04.2016, 07:55 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2016 07:55 von GerdW.)
Zitat:Wenn ich die Liste mit 5 Werten befüllt habe und sie abarbeite und ich dann im nächsten Durchlauf nur die ersten 3 Werte haben will, wie genau lösche ich dann die Werte 4 und 5?
Indem du sie aus der Tabelle (aka 2D-Array) entfernst/löschst!
Zitat:Wenn ich sie einfach lösche, wird 0 definiert, so dass ich im nächsten Durchlauf immer eine Schleife von 5 und nicht wie gewünscht von 3 habe.
Wenn dem so ist, dann hast du die Elemente nicht "einfach gelöscht", sondern nur mit Null überschrieben.
"Überschreiben" ist nicht "Löschen"!
Zitat:bei meinem Beispiel mit dem Tank ist es egal, ob 0 Liter nachgefüllt werden, aber man möchte das Programm ja auch so schlank wie möglich gestalten ohne sinnlose Extrarunden.
Verstanden habe ich Dich nicht. Eine Tablelle besteht aus Zeilen und Spalten, es gibt da keine Elemente mit Index 4 und 5. Der Index ist immer zweistellig.
Des Element "Tabelle" ist ein 2D-Array aus Strings, mit zusätzlichen Eigenschaften.
Bei einem 2D-Array aus Zahlen kann ich kein einzelnes Element löschen, es muß immer die ganze Zeile oder Spalte sein.
Mit Strings geht es streng genommen auch nicht, aber immerhin können dann die Einzelelemente auch Leerstrings sein, was etwa auf das Gleiche hinauskommt, als wenn sie nicht mehr existieren.
Bei Zahlenarrays geht das nicht. Zwar kann man den Wert Null zuweisen, aber man weiß dann hinterher nicht, ob das ein echter Datenwert ist oder ob mit Inhalt Null nur ein nicht existierender Wert markiert werden soll.
15.04.2016, 08:25 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2016 08:29 von chrissy.)
Zitat:bei meinem Beispiel mit dem Tank ist es egal, ob 0 Liter nachgefüllt werden, aber man möchte das Programm ja auch so schlank wie möglich gestalten ohne sinnlose Extrarunden.
Also ich befülle die Tabelle mit 5 Werten wie in Bild 1. Dann habe ich 5 Durchläufe, so soll es auch sein.
Dann LÖSCHE (nicht mit "0" ersetzen) ich den 4. und 5. Wert (siehe Bild 2). Es ist also nichts im Feld, auch keine "0".
Trotzdem werden jetzt noch 5 Durchläufe ausgeführt.
Erst wenn ich das Programm schließe, neu starte und 3 Werte eintrage, werden auch nur diese 3 Durchläufe ausgeführt.
Ich hoffe nun ist verständlich, was ich meine
LG Christina
(15.04.2016 08:05 )Lucki schrieb: Bei einem 2D-Array aus Zahlen kann ich kein einzelnes Element löschen, es muß immer die ganze Zeile oder Spalte sein.
Ich benutze nur die erste Spalte, die zweite ist (bisher) von Anfang an leer.
LG Christina
15.04.2016, 08:45 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2016 08:47 von GerdW.)
Wo ist da ein VI von dir? Ich sehe nur Beispiele von Freddy und Lucki…
Zitat:Also ich befülle die Tabelle mit 5 Werten wie in Bild 1. Dann habe ich 5 Durchläufe, so soll es auch sein.
Dann LÖSCHE (nicht mit "0" ersetzen) ich den 4. und 5. Wert (siehe Bild 2). Es ist also nichts im Feld, auch keine "0".
Trotzdem werden jetzt noch 5 Durchläufe ausgeführt.
Welche Bilder meinst du? Dein Link zeigt auf einen Beitrag, der nur aus Text besteht…
Häng doch einfach mal dein VI an…
(Und bitte für LV2014 zurückgespeichert…)
also ich habe zusätzlich zum Link 2 Bilder angehängt, die bei mir auch korrekt angezeigt werden.
Aber ich habe das VI mal hochgeladen.
Also ich starte das Programm, trage 3 Werte ein --> 3 Durchläufe
ich trage 2 weitere Werte ein (also 5 insgesamt) --> 5 Durchläufe
ich LÖSCHE (nicht mit 0 ersetzen) die letzten beiden Werte wieder --> eigentlich 3, aber trotzdem 5 Durchläufe
Zitat:Also ich starte das Programm, trage 3 Werte ein --> 3 Durchläufe
ich trage 2 weitere Werte ein (also 5 insgesamt) --> 5 Durchläufe
ich LÖSCHE (nicht mit 0 ersetzen) die letzten beiden Werte wieder --> eigentlich 3, aber trotzdem 5 Durchläufe
Warum nutzt du eine Tabelle (=2D-Array of strings), um ein 1D-Array von Zahlen bereitzustellen?
Genau da liegt dein Problem!!!
Du trägst drei Werte ein: deine Tabelle enthält nun 3 Zeilen (mit nicht-leeren Strings).
Du trägst zwei weitere Werte ein: deine Tabelle enthält 5 Zeilen (mit nicht-leeren Strings).
Du löscht die letzten beiden Werte: dummerweise wird damit das Stringelement auf "leerer String" gesetzt, aber NICHT das Element an sich gelöscht!!!
Du hast jetzt eine Tabelle mit 5 Zeilen, deren letzte beiden Zeilen nun eben leere Strings enthalten!!!
Mit einem Array of I32 wäre das nicht passiert!
Und mittels Debuggen hättest du das auch herausbekommen müssen…
@Freddy: Wieso soll es die Lösung sein, wenn man die Tabelle komplett löscht?
Zitat:Was genau passiert da und wo finde ich diese(s) Funktion/Symbol?
Der Teil in der For Schleife ist eine leere Konstante.
Der Tunnel steht auf "letzter Wert"
Außerhalb der Schleife, dass ist eine lokale Variable der Tabelle.
Zitat:@Freddy: Wieso soll es die Lösung sein, wenn man die Tabelle komplett löscht?
Da kein aufrufendes VI dabei war, bin ich davon ausgegangen, dass das VI immer wieder von Hand gestartet wird.
In diesem Fall müsstest Du über das Kontext Menü alle überflüssige Felder einzeln löschen und den alten Text über Doppelklick immer markieren. das erscheint mir zu umständlich.