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!
hier mal eine Frage, die eigentlich in die Grundlagen gehört:
Ich habe ein 2D-Array (U32) und ein eindimensionales. Das eindimensionale möchte ich am Ende als Zeile in das zweidimensionale einfügen.
Dazu wollte ich "Array erstellen" benutzen, weil bei "In Array einfügen" Daten abgeschnitten werden, falls die Spaltenanzahl des eindimensionalen Feldes größer als die des zweidimensionalen ist, und die Spaltenanzahl jeweils zwischen 0 und 5 variieren kann.
Und genau bei 0 liegt das Problem. Ist mein 1D-Array leer bekomme ich bei jedem der genannten Sub-VIs eine Zeile, gefüllt mit "0", an mein 2D-Array gehängt.
Ist hingegen das 2D-Array leer, erscheint nur die angehängte Zeile im Ergebnis.
Ich denke, daß hier ein Fehler von LV vorliegt, denn beim Einfügen eines leeren 1D-Arrays an ein bestehendes 1D-Array ändert sich ja auch nichts.
Das hat mich auf die Idee gebracht, aus dem 1D-Array ein 2D-Array zu machen und das dan anzuhängen, aber auch hier bekomme ich eine Zeile mit Nullen angehangen.
Aber eine Zeile mit "0" ist doch was anderes als "nichts", was ich ja eigentlich anhängen will.
Ist das Problem bekannt oder hat jemand 'ne Lösung?
Ob das "Verhalten" von LV jetzt so korrekt ist der nicht, ich glaube, darüber kann man streiten. Einerseits hast du recht, dein anzuhängendes Array ist ja leer, andererseits, es hat ja schon eine "Dimension", die du anhängst...
Aber eine Lösung hab ich natürlich:
Überprüfe vor dem Anhängen die Größe des Arrays, wenn 0, wird nichts angehängt:
(Im "1, Default" Case steht dann die Build-Array-Fkt.)
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Das Manipulieren der Arrays durch Auffüllen mit Nullen ist zwar einerseits normal, da das Resultat ja immer rein "rechteckig" sein muß. Aber daß das auch bei einem völlig leerem Array geschieht, halte ich auch nicht für in Ordnung und würde es als Bug bezeichnen.
Das Work-arround wäre allerdings ganz einfach:
An den Test vorher, ob das Feld leer ist, hab ich auch schon gedacht, es ist halt jetzt bißl blöd, eine case-Struktur in das Programm reinzuquetschen.
Aber ich denke schon, daß es ein Fehler ist, denn, wie Jens sagt, hat zwar mein anzuhängendes Feld eine Dimension, aber ich hab's ja auch mit leerem 2D-Array ausprobiert, das ja auch eine Dimension, oder besser 2 hat, und da verhält es sich ja so wie erwartet bzw. erwünscht - im Ergebnis steht nur die Zeile des 1D-Arrays.
Wenn beide leer sind, ist auch das Ergebnis leer. Das paßt ja auch.
Mir kommt halt das Verhalten bißl komisch vor, da werde ich erst mal nicht um die case-Struktur herum kommen.
Vielleicht kann ja jemand von den Admins das Thema in die Kategorie "Bugs" LV8.5 verschieben.
' schrieb:Und genau bei 0 liegt das Problem. Ist mein 1D-Array leer bekomme ich bei jedem der genannten Sub-VIs eine Zeile, gefüllt mit "0", an mein 2D-Array gehängt.
Das Anhängen eines leeren 1D-Arrays an ein 2D-Array als Zeile des 2D-Array erzeugt selbstverständlich eine Nuller-Zeile. Auch ein leeres 1D-Array ist ein 1D-Array. Da aber bei einem 2D-Array alle Dimensionen jeweils gleich lang sein müssen erscheint eine Nuller-Zeile.
Zitat:Ist hingegen das 2D-Array leer, erscheint nur die angehängte Zeile im Ergebnis.
Klar.
Zitat:denn beim Einfügen eines leeren 1D-Arrays an ein bestehendes 1D-Array ändert sich ja auch nichts.
Das kannst du aber mit einem 2D-Array nicht vergleichen. Beim Anfügen an ein 2D-Array wird "in einer anderen Dimension" angefügt. Bei 1D an 1D werden lediglich die Daten angehängt - und da da nix ist, wird nichts angehängt. Bei 1D an 2D wird ein Array also solches angehängt - und da ist es egal, ob leer oder nicht.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Da aber bei einem 2D-Array alle Dimensionen jeweils gleich lang sein müssen erscheint eine Nuller-Zeile.
sind sie ja auch, es dürfte gar keine Zeile eingefügt werden, weil ja effektiv gar keine Daten hinzukommen. Und somit verändern sich die Dimensionen auch nicht, sie bleiben gleich.
So klar ist mir dann aber nicht, warum es funktioniert, wenn das 2D-Array leer ist.
Wenn das so einfach funktionieren würde, müßte es ja gehen, wenn ich zu dem 1D-Array eine Dimension hinzufüge (das ja dann trotzdem leer ist) und das dann anhänge. Doch dort bekomme ich ja aber auch die Nuller-Zeile.
' schrieb:So klar ist mir dann aber nicht, warum es funktioniert, wenn das 2D-Array leer ist.
Also ich teile Dein Bedenken voll und tendiere dazu, daß es ein Bug ist. Es kann aber auch sein, daß es für dieses Verhalten einen gewichtigen, durch ein Beispiel belegbaren Grund gibt, daß es NI so gemacht hat.
Auf jeden Fall ist es ein Glück, daß es wenigstens mit leerem 2D-Array funktioniert. Denn ansonsten könnte man im Bild unten die einfache for-Schleife (oben) nicht verwenden und müßte immer die häßliche und umständliche untere For-Schleife benutzen.
24.09.2008, 09:53 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2008 09:54 von Lucki.)
' schrieb:Das Anhängen eines leeren 1D-Arrays an ein 2D-Array als Zeile des 2D-Array erzeugt selbstverständlich eine Nuller-Zeile.
Das finde ich überhaupt nicht selbstverständlich, daß eine angehängte Leerzeile dasselbe Ergebnis liefert wie eine angehängte Zeile mit Nullen. Diese unterschiedlichen Arrays sollten doch auch unterschiedliche Ergebnisse ausmachen.
Solche formalen Überlegenungen über Selbstverständlichkeiten oder nicht helfen hier auch nicht weiter. Fakt ist doch, daß NI es sowohl so als auch so hätte machen können. Und die Frage ist: gibt es einen überzeugenden Grund, daß es Ni so gemacht hat und nicht anders? Gibt es ein Beispiel-VI, welches zeigt, daß es vorteilhaft war, es so zu machen? Mir fallen nur Nachteile auf, wenn es so ist wie jetzt, und deshalb halte ich es für einen Bug.