INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

2D Array erstellen; Anzahl Zeilen abhängig von Cases



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!

19.08.2010, 09:37
Beitrag #1

Dommas Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jul 2010

2010
2008
DE_EN

86741
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo zusammen,
ich habe eine Frage an Euch: Ich muss ein 2D-Array erstellen. Dieses Array kann zwischen 0 und 8 Zeilen haben, und hat dann 9 Elemente in der Breite.
An sich kein Problem.
Aber: Ob eine Zeile erstellt wird, hängt von einer Case-Struktur ab.
Ich habe jetzt 3 verschiedene Varianten in das Angehängt VI programmiert:

1. Built Array: Wird mit einem NULL 2D-Array initialisiert und die einzelnen Elemente aus den Cases werden angehängt. Für mich leider untauglich, weil er hier immer 8 Zeilen macht, und dann alle Elemente auf 0 setzt.

2. Insert into Array(außen): sieht schon besser aus, aber wenn ich z.B. Case1-2 auf false setze und Case3 auf true macht er mir wieder die 1. und 2. Zeile mit 0en voll.

3. Insert into Array(in den Cases): Hier habe ich die Insert-Funktion in die Cases gezogen, und schleife im false-Fall das vorherige Ergebnis einfach durch, oder hänge im true-Fall eine neue Zeile an. Das Ergebnis ist genau das was ich brauche.

Aber: Geht das auch schöner, als so wie ich das mache? Ich habe ein bischen Angst, wegen der Zeit. Da kommt noch einiges vorher und nachher in der Schleife, und ich habe insgesamt 25ms pro Schleifendurchlauf Zeit...



Nächste Teilfrage: Was passiert hier eigentlich mit dem Speicher von den Arrays? Holt er sich einmal die Größe die er braucht, und überschreibt den Speicher immer wieder, oder holt er sich bei jedem Schleifendurchlauf neuen Speicher?

Danke und Gruß
Dommas

LV2009 SP1


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.08.2010, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2010 10:33 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo Dommas,

zum Bauen eines Arrays (bei überschaubarem Umfang) verwende ich sowas hier:
   

Schieberegister sind dazu da, sich Werte aus vorangegangenen Iteration zu merken. Dein VI dürfte da etwas Probleme gehabt haben...

"Nächste Teilfrage: Was passiert hier eigentlich mit dem Speicher von den Arrays? Holt er sich einmal die Größe die er braucht, und überschreibt den Speicher immer wieder, oder holt er sich bei jedem Schleifendurchlauf neuen Speicher?"
LV holt sich dann die komplette Größe, wenn diese schon vor der Ausführung bekannt ist. (Beispiel: FOR-Loop mit Autoindexing). Ansonsten wird bei jedem BuildArray oder InsertIntoArray ein neuer, größerer Speicherblock angefordert und die Daten kopiert...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 11:10 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2010 11:13 von Dommas.)
Beitrag #3

Dommas Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jul 2010

2010
2008
DE_EN

86741
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo Gerd,

' schrieb:LV holt sich dann die komplette Größe, wenn diese schon vor der Ausführung bekannt ist. (Beispiel: FOR-Loop mit Autoindexing). Ansonsten wird bei jedem BuildArray oder InsertIntoArray ein neuer, größerer Speicherblock angefordert und die Daten kopiert...

Das heißt, in meinem Fall würde er in jedem Schleifendurchlauf mehr Speicherbedarf haben, richtig? Wie kann ich das dann verhindern? Kann ich ein nicht-initialisiertes 2D-Array mit einer maximalen Größe von 8 Zeilen und 9 Elementen definieren?


' schrieb:zum Bauen eines Arrays (bei überschaubarem Umfang) verwende ich sowas hier:

Schieberegister sind dazu da, sich Werte aus vorangegangenen Iteration zu merken. Dein VI dürfte da etwas Probleme gehabt haben...

die Schieberegister brauche ich nicht. Im Gegenteil! Der soll sich ja nichts merken, sondern immer brav die aktuellen Werte holen. Ich überleg mir eher das ganze noch in ein Event-Struct zu packen, und nur bei Änderungen zu reagieren. Dann muss er speichern, aber die alten Werte überschreiben; im Moment wärs tödlich wenn er die alten Werte speichern würde.
Ich brauche hier die unterschiedlichen Case-Schleifen, und muss ja immer die Werte von der einen an die andere übergeben.
Was natürlich ginge ist dass ich mein "insert into" durch das "built" ersetze. Aber das dürfte von der Geschwindigkeit her nichts bringen, oder?

Du baust Dein Array ja auch in der Case. Ich habe gemeint, ob das geht, ohne dass das in der Case stattfindet, sondern einmal für alle Cases.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 12:04 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2010 12:07 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo Dommas,

"Kann ich ein nicht-initialisiertes 2D-Array mit einer maximalen Größe von 8 Zeilen und 9 Elementen definieren?"
Du willst also ein Array mit einer bestimmten Größe initialisieren, es aber dann doch nicht initialisieren???
Klar kannst du ein Array initialisieren, es hat dann aber schon Werte drin stehen. Die kannst du aber so wählen, dass du evtl. nicht in deinen normalen Daten vorkommende Werte verwendest (z.B. NaN für DBL-Werte)... Dann ersetzt du immer eine Zeile nach der anderen (& musst einen Zähler dafür mitschleppen), und am Ende schneidest du die "unbeschriebenen" Zeilen weg (ArraySubset oder ReshapeArray).

"Was natürlich ginge ist dass ich mein "insert into" durch das "built" ersetze."
Solange du InsertIntoArray nur benutzt, um eine Zeile vor die andere zu packen, ist BuildArray die bessere (weil "natürlichere") Wahl. Geschwindigkeit dürfte bei den wenigen Daten hier gleich sein.

"ohne dass das in der Case stattfindet, sondern einmal für alle Cases."
Da aus einem Case immer ein Wert herauskommen muss (entweder deine Nutzdaten oder ein leeres Array), wirst du auf diese Weise immer Nuller-Zeilen bekommen. Du willst eine Zeile hinzufügen in einem bestimmten Case - dann mach es doch auch in diesem Case...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 12:17
Beitrag #5

Dommas Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jul 2010

2010
2008
DE_EN

86741
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
' schrieb:"Kann ich ein nicht-initialisiertes 2D-Array mit einer maximalen Größe von 8 Zeilen und 9 Elementen definieren?"
Du willst also ein Array mit einer bestimmten Größe initialisieren, es aber dann doch nicht initialisieren???

Im Prinzip ja;)Auch wenn sich das bescheuert anhört.
Wenn es mir hilft, dass er immer auf den gleichen Speicherteil schreibt.


' schrieb:Klar kannst du ein Array initialisieren, es hat dann aber schon Werte drin stehen.

Eben. Das war ja mein Problem, mit den Lösungen wo ich einfach 1D Arrays aus den Cases rausgezogen hab und draußen ein 2D Array draus gemacht hab. Dann müsste ich das 2D Array irgendwie sortieren, und dann die Teile löschen die ich nicht will. Es kann auch sein dass z.B. nur der 3. und 8. Case true sind, also will ich in meinem fertigen 2D Array auch nur 2 Zeilen, mit dem Inhalt des 3. und 8. Cases

' schrieb:Du willst eine Zeile hinzufügen in einem bestimmten Case - dann mach es doch auch in diesem Case...

OK, ich hatte wie gesagt nur Angst, dass ich hier mit meiner Laufzeit Probleme bekommen könnte, und wollte nur sicher gehen, dass es keine elegantere Möglichkeit gibt.


Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 12:19
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo Dommas,

du machst dir Sorgen, ob LV Zeitprobleme bekommt, weil du Zeilen mit 9 Werten zu einem Array mit maximal 8*9 Werten hinzufügen willst?
Was für einen Rechner benutzt du denn? Einen C64?Smile

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 13:00
Beitrag #7

Dommas Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jul 2010

2010
2008
DE_EN

86741
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
das nicht, aber ich muss im 25ms Takt auf den CAN-Bus schreiben. und da hab ich Angst das ich das nicht einhalten kann mit dem ganzen Zeug...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2010, 13:40 (Dieser Beitrag wurde zuletzt bearbeitet: 24.08.2010 08:54 von jg.)
Beitrag #8

Dommas Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 93
Registriert seit: Jul 2010

2010
2008
DE_EN

86741
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
so, habs jetzt noch ein wenig unübersichtlicher gemacht. Sorry deswegen, ich hoffe da blickt noch jemand anderes durch außer mir.

Hab ich jetzt so einen "festen-Array-Speicher", oder wächst der immernoch mit jedem While-Durchlauf?

Lv09_img2



Edit::offtopic2:Verdammt, wie einmal hätte gereicht; wie bekomm ich jetzt das zweite png wieder weg? Und wieso konnte ich meinen vorherigen Beitrag nicht mehr bearbeiten?!Glas2


Edit2:
Hab jetzt noch eine andere Variante gebaut. Die müsste wahrscheinlich ein bischen schneller sein, da ich hier nicht das Array durchsuchen lasse, sondern ihm einfach sag, "schau Dir das 0te Element an, und sag ob das 0 ist", oder?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.08.2010, 08:36
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Hallo Dommas,

pushen ist meist besser als irgendwelche PMs...

Ich verstehe nicht ganz, was du in deiner Schleife so anstellst.
In den Case fügst du immer eine Zeile vor dem Array ein - nimm für diese Operation besser BuildArray (übersichtlicher).
Außerhalb der Cases fügst du immer das leere Array als erstes ein und dann diverse Zeilen vorn-/hintendran... Mal so, mal so??? Warum überhaupt ein leeres Array, wenn du nur anfügst?

Du verwendest nirgends ReplaceArraySubset - nur damit arbeitest du mit einem festen Array & Speicherbereich! Du definierst ein Array (das Dingens außerhalb der Schleife) und in der Schleife ersetzt du dann einzelne Zeilen dieses (fixen) Arrays - das klappt nur mit ReplaceArraySubset!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.08.2010, 08:56
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
2D Array erstellen; Anzahl Zeilen abhängig von Cases
Offtopic2
' schrieb:Edit::offtopic2:Verdammt, wie einmal hätte gereicht; wie bekomm ich jetzt das zweite png wieder weg? Und wieso konnte ich meinen vorherigen Beitrag nicht mehr bearbeiten?!Glas2
Zu 1.: so:
   
Zu 2.: Der Timeout zum Editieren ist hier im LVF "relativ kurz", ich glaube, aktuell bei ca. 30 min, muss mal Dennis fragen...

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  2D Array einzelne Zeilen in anderes Array michi96 2 3.521 15.12.2021 10:53
Letzter Beitrag: michi96
  Bestimmte Zeilen im Array löschen wenn Bedingung nicht erfüllt ist bachatero18 4 5.302 31.03.2020 14:49
Letzter Beitrag: bachatero18
  Anzahl beschriebener Zeilen einer Tabelle jan_1 17 9.504 15.03.2017 12:54
Letzter Beitrag: GerdW
  aus Zeichenkette Array erstellen hubem14 5 4.893 16.08.2016 15:50
Letzter Beitrag: Freddy
  Zeilen einer Tabelle ausblenden chrissy 6 5.955 19.07.2016 07:38
Letzter Beitrag: Freddy
  Array Zeilen mit Boolean ausblenden hubem14 7 6.636 18.07.2016 12:54
Letzter Beitrag: hubem14

Gehe zu: