LabVIEWForum.de - Array in Excel mit Überschrift

LabVIEWForum.de

Normale Version: Array in Excel mit Überschrift
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich habe ein 16 Arrays mit je 32 Werten (siehe Bild). Die habe ich wie oben im Bild gezeigt in Excel eingelesen (16*32 pro Zeile). DIe Überschrift habe ich in der rosa Box beschrieben (HSL1.1, HSL1.2 usw.). Das erscheint immer statisch in der ersten Zeile.

Jetzt hab ich aber in diesem Fall nur 4 Arrays aktiv. Im Endeffekt habe ich dann auch nur 4*32 Werte pro Zeile gespeichert. Die Überschrift ist aber trotzdem 16*32 lang und diese passt jetzt natürlich nicht zu den Werten.

Am liebsten wärs mir, wenn ich die Überschriften nur zu jedem Array habe.
Wenn ein Array aktiv ist, dann sind das immer alle 32 Werte. Das erste Array soll mit HSL1 beginnen, das zweite HSL2 usw.
Jeder Arraywert kriegt dann noch eine .1, .2 ... .32 dazu.
Wär cool wenn das ginge, ich weiß nur nicht wie.

Alternativ würde ich das auch so nehmen, dass ich die inaktiven Arrays mit 0 oder "" speicher, damit die Überschriften stimmen. Ist zwar dann sehr viel unnötige Daten, aber es ist wenigsten richtig.

Hoff ihr könnt mir wieder mal weiterhelfen Wink

Gruß win98
Hallo win,

du zeigst uns weder irgendwelche Bilder noch irgendwelchen Code in Form von VIs.

Wie können wir dir sonst noch helfen?
ah ja klar. das kommt davon wenn man den Anhang vergisst Big Grin
sorry
[attachment=34513]

edit: vielleicht noch wichtig: Die While Schleife geht um das "Write File Task"
Hallo win98,
Was mich an dem Foto wundert, bist du dir sicher, das es ein 2D Array ist? So wie der Screenshot aussieht, sind das 1D Arrays die nebeneinander auf dem Frontpanel liegen?

Die Beschriftung mit HSL1.1 ... HSL 16.32 geht relativ angenehm mit 2 for-Schleifen.
Hey,

ich hoffe ich versteh das Problem richtig. Mein Vorschlag wäre folgender:

Du nimmst eine Fall unterscheidung. Ich glaub hier wird das immer "State-Maschine" genannt. Du fragst ab, welche Werte abgespeichert werden, bzw das muss ja in deinem Programm eh vorhanden sein, damit du weißt welche der Spalten du nach Excel schickst.

Sagen wir, du schickst Spalte 0,1,3 und 5 nach Excel. Nun rufst du die entsprechenden States auf und in jedem State addierst du zu einem String die entsprechende Überschrift. Am Ende der Abfrage schreibst du dann dieses String genauso wie du es jetzt tust in die Datei.

Hmm, ich hoffe ist klar was ich meine.

Ich hab noch eine Frage am Rande an dich: Warum nutzt du in der WriteFileTask-Schleife den Rückkopplungsknoten für den Boolean? mMn müsste willst du doch nur noch nach 10 Interationen abbrechen. Da würde es auch reichen, direkt in die Abbruchbedingung vom größergleich zu gehen. Wenn da nen tieferer Sinn hintersteckt, bitte aufklären.Smile

Grüße,

Takuro
ja stimmt das mit dem 2d array ist blöd Big Grin

da kannste ich das mit den schleifen und dem "automatisch indizieren" nicht. Deswegen hab ich das 1d array als 2d array indiziert und in der schleifen nochmal automatisch indiziert. ganz nach dem motto dont change a running system Big Grin
[attachment=34517]
wie meinst du über eine for-schleife? die zahlen hinzuschreiben ist mit ner schleife kein problem das stimmt. aber wie krieg ich raus welches array gerade aktiv ist oder nicht?

in VB würde ich sowas sagen wie "if (Textbox1.Enable=0) then return "HSL1.1;HSL1.2...."

aber wie in LV
(05.07.2011 09:29 )win98 schrieb: [ -> ]aber wie krieg ich raus welches array gerade aktiv ist oder nicht?

in VB würde ich sowas sagen wie "if (Textbox1.Enable=0) then return "HSL1.1;HSL1.2...."

aber wie in LV

Dann hast du wohl scheinbar keine Abfrage bisher gebaut, um deine Daten selektiv nach Excel zu schreiben.

Du kannst doch einfach über eine Schleife abfragen, ob ein Array in keinem Index einen Wert enthält. Wenn das der Fall ist, dann ist er leer und wird nicht geschrieben. Ist ein Wert irgendwo drin, dann wird er rausgeschrieben. Bzw wenn du die Auswahl durch irgendwelche Controllboxen beschränkst, dann kannst du diese ja auch abfragen.

Und dann eben in die Case Schleife springen.
(05.07.2011 08:53 )Takuro schrieb: [ -> ]Hey,

ich hoffe ich versteh das Problem richtig. Mein Vorschlag wäre folgender:

Du nimmst eine Fall unterscheidung. Ich glaub hier wird das immer "State-Maschine" genannt. Du fragst ab, welche Werte abgespeichert werden, bzw das muss ja in deinem Programm eh vorhanden sein, damit du weißt welche der Spalten du nach Excel schickst.

Sagen wir, du schickst Spalte 0,1,3 und 5 nach Excel. Nun rufst du die entsprechenden States auf und in jedem State addierst du zu einem String die entsprechende Überschrift. Am Ende der Abfrage schreibst du dann dieses String genauso wie du es jetzt tust in die Datei.

Hmm, ich hoffe ist klar was ich meine.

Ich hab noch eine Frage am Rande an dich: Warum nutzt du in der WriteFileTask-Schleife den Rückkopplungsknoten für den Boolean? mMn müsste willst du doch nur noch nach 10 Interationen abbrechen. Da würde es auch reichen, direkt in die Abbruchbedingung vom größergleich zu gehen. Wenn da nen tieferer Sinn hintersteckt, bitte aufklären.Smile

Grüße,

Takuro

das könnte ich machen, wenn ich irgendwoher wüsste welche arrays aktiv und inaktiv sind. ich glaube ich kann nicht unterscheiden ob ich array 1,3,5,9 hab oder 2,6,8,10

hier nochmal die verkettung des arrays
[attachment=34518]

edit: ich bin zu langsam mit dem posten, da habt ihr schon wieder ne lösung Big Grin muss erst ma lesen und verstehn^^
(05.07.2011 09:33 )Takuro schrieb: [ -> ]Dann hast du wohl scheinbar keine Abfrage bisher gebaut, um deine Daten selektiv nach Excel zu schreiben.
Ne, die sind zusammen auf ein Array geklatscht und in einer Excelzeile hintereinander gespeichert.

(05.07.2011 09:33 )Takuro schrieb: [ -> ]Du kannst doch einfach über eine Schleife abfragen, ob ein Array in keinem Index einen Wert enthält. Wenn das der Fall ist, dann ist er leer und wird nicht geschrieben. Ist ein Wert irgendwo drin, dann wird er rausgeschrieben. Bzw wenn du die Auswahl durch irgendwelche Controllboxen beschränkst, dann kannst du diese ja auch abfragen.

Und dann eben in die Case Schleife springen.
Kling gut, und bringt mich auf eine Idee (da weiß ich wie das geht, kA wie ich rauskrieg ob n array kein index hat Tongue^^). Ich kann doch von den 16 Arrays die Größe bestimmen und wenn die größer 0 ist schreib ich einen String ansonsten nich, die strings für ich dann zusammen als überschrift, wo jetzt die pinke box mit HSL... ist.
Und das mach ich am besten mit "Lokale Varbiable erstellen" und "in Lesen ändern".

so würds doch gehen oder?
Da sollte doch in jedem Array Real 1 - Real 4 dasselbe drinstehen? Klick mal im Bedienfeld auf Real 1 *rechtsklick* Sichtbarkeit - Indizierung aktivieren und schau durch.

--> Dadurch hast du eigentlich nur 4* 1D Arrays (Real, Int, Bool, Long). Die in 4 * 32 Teile geschrieben werden.
Somit kannst du mit Array Größe die jeweilige Länge bestimmen. Bei 3*32=96 weißt du das es nur 3 Spalten sind.
ja Real 1 - 4 ist das selbe, die haben nur die indizirung 0 / 32 / 64 / 96 um das besser anzuzeigen. hab ich mir auch zuerst gedacht, dass das reicht, aber es könnte ja sein das Real1 inaktiv ist und Real4 nicht

---- (Gedankenstriche)

soeben ist mir eingefallen dass das gar nicht möglich ist Big Grin stimmt dann mach ich das so Smile

dann muss ich nur 4 arraygrößen bestimmen mit 4 case und 4 strings zusammenführen. klingt easy Smile
Seiten: 1 2
Referenz-URLs