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!
Hallo zusammen,
ich habe wie sollte es anderst sein ein Problem.
Kurz zur Aufgabe:
Ich möchte einen Header samt Messwerten in einer Tabelle auf dem FP einfügen. Beim ersten Messdurchlauf wird der Header angelegt. Dieser wird in die Tabelle ab Pos 0/0 eingetragen. Er ist 3 Zellen breit und 10 Zellen hoch.
Soweit sogut. Der Header steht in der Tabelle das eintragen hat geklappt.
Nun sollen aber Messwerte die ich zuvor aufgenommen habe ab Position 11 (Headergröße+2)in Spalte 0 eingetragen werden. Allerdings untereinander sprich:
0 1 2 3 ...
0 H H H
1 H H H
2 H H H
3 H H H
4 H H H
5 H H H
6 H H H
7 H H H
8 H H H
9 H H H
10
11 Wert1
12 Wert2
13 Wert3
...
Leider finde ich nirgends eine Möglichkeit dies umzusetzen ein einfügen in die Tabelle führt dazu , dass entweder in Zeile 11 richtig beginnend eingetragen wird, allerdings dann die restlichen Werte in Zeile 11 bleibend.
Gibt es irgendwie die Möglichkeit in einem 2D Array was meine Tabelle ja ist, ab einer spezifischen Zelle
abwärts einen Wert einzutragen?
Der Header muss zuerst geschrieben werden, daran komme ich nicht vorbei. Habe das Problem stark gekürzt, Später werden bis zu 8 Header + Messwerte immer untereinander stehen, wobei dann auch Messergebnisse in den Spalten 1,2,3... stehen werden, aber das grundsätzliche Problem bleibt beim Schreiben in eine spezifische Zelle?
Ich hoffe ich konnte mein Problem einigermaßen erträglich schildern.
Wenn von euch einer eine Idee hätte wie bzw. ob so etwas überhaupt geht, wäre ich sehr dankbar bin mit diesem Problem schon den ganzen Tag beschäftigt und mir auch nicht sicher ob es überhaupt unter LabVIEW möglich ist.
wie du richtig erkannt hast, ist deine Tabelle ein 2D-(String-)Array...d.h. du kannst alle möglichen Array-Funktionen darauf anwenden. Wenn du erst den Header schreibst, und dann später anfügen willst, ließt du am besten erst den Tabelleninhalt aus, fügst mit BuildArray deine neuen Werte (=1D oder 2D-Array) an und schreibst dann wieder alles in die Tabelle.
Wenn du die maximale Tabellenlänge vorher kennst, kannst du eine Tabelle auch mit InitializeArray initialisieren, und wendest dann nach dem Auslesen des Tabelleninhalts "ReplaceArraySubset" an, um deine neuen Werte an die gewünschten Zellen zu schreiben! Replace ist auf jeden Fall schneller als Build, um das vorherige Auslesen des schon vorhandenen Tabelleninhalts wirst du aber bei beiden Varianten nicht vorbei kommen!
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
19.04.2007, 09:07 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2007 09:22 von Lucki.)
' schrieb:Gibt es irgendwie die Möglichkeit in einem 2D Array was meine Tabelle ja ist, ab einer spezifischen Zelle
abwärts einen Wert einzutragen?
Eine Tabelle ist aber nicht automatisch ein 2D-Array. Ja, es kann sein, aber eher ist eine Tabelle einfach ein besonders formatierter Text (mehrzeiliger String).
Fest steht nur, das sich hier, auch bei den Zahlendarstellungen, immer um Strings handelt. (Man kann in einem Array nicht unterschiedliche Formate verwenden. Da der Header Text ist, müssen es die Zahlen zwangsläufig auch sein)
Du hast also 2 Möglichkeiten zur Darstellung: Anzeige als Text oder als 2D-Array,bestehend aus Stringelementen (Tip: Zur Anzeige das das
Anzeigeelement "Tabelle" verwenden)
Kleine Anmerkung:
Das Format 2D-Array hat aber den Nachteil, daß dann der Header aus genau solchen Elementen bestehen muß wie die Daten selbst. Und wenn die Daten mit Header als TXT gespeichert werden sollen, muß spätestens dann die Konvertierung von 2D in Text erfolgen. Also üblich ist das nicht, Daten mit Header in ein 2D-Array hineinzuzwängen. Üblich ist, erst bei der Auswertung die Daten in ein D-Array zu konvertieren, und zwar im Format numerisch, wobei der Header vorher natürlich abzutrennen ist.
Das Bild zeigt das Hinzufügen eine neuen Zeile (links: 2D-Format, rechts: Text-Format)
HÄH? Eine Tabelle im LV-Sinn ist doch IMMER ein 2D-String-Array...
Es handelt sich dabei doch immer um ein Control/Indicator, dessen Inhalt in einem 2D-String-Array "übertragen" werden...was soll das heißen..."besonders formatierter Text"?
Wenn man die Werte einfach in ein Stringfeld einträgt (in "Tabellenform") nimmt man sich doch automatisch die komfortablen Formatierungs-und Anzeigemöglichkeiten, die die LV-Tabelle bietet...man macht sich so ja mehr Arbeit, das ist doch Quatsch...!
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
HÄH? Eine Tabelle im LV-Sinn ist doch IMMER ein 2D-String-Array...
Es handelt sich dabei doch immer um ein Control/Indicator, dessen Inhalt in einem 2D-String-Array "übertragen" werden...was soll das heißen..."besonders formatierter Text"?
Wenn man die Werte einfach in ein Stringfeld einträgt (in "Tabellenform") nimmt man sich doch automatisch die komfortablen Formatierungs-und Anzeigemöglichkeiten, die die LV-Tabelle bietet...man macht sich so ja mehr Arbeit, das ist doch Quatsch...!
Gruss
Achim
Hallo Achim, Du bist bist ja blitzschnell, Deine Antwort war schon da, während ich noch mit dem Nach-Editieren beschäftigt war. Ja, Du hast recht, es gibt im LabVIEW das Bedien-Anzeigeelement "Tabelle", und das ist ein 2D-Textarray. Aber es gibt auch die VIs "Aus Tabellenkalkulationsdei Lesen/schreiben", und diese Tabellen sind in der gespeicherten Form Texte, mit (z.B.) TABs innerhalb der Zeilen. Und außerdem weiß jeder was eine Tabelle ist: Es ist eine geometrisch regelmäßige Anordnung aus Zeilen und Spalten auf Papier oder Bildschirm, und der normale Mensch, sofern er nicht gänzlich von der Mathematik beherrscht wird, assoziiert eine solche Tabelle nicht automatisch mit einem "2D-Array"
Solchen Definitionsfragen sind aber hier gar nicht wichtig. Wichtig ist, was besser ist: Die Anzeige der aus Zeilen und Spalten bestehenden Daten (inklusive Header) als 2D-Array oder als formatierter mehrzeiliger Text.
Die Faktenlage ist zu dürftig, als daß wir das entscheiden können. Es kommt auf den Header an. und irgend ein frei geschriebener Header-Text passt schlecht in das 2D-Array, und der sollte ja mit angezeigt werden. Und die erwähnten Editiermöglichkeiten, die sind je gar nicht gefordert, das Programm soll nur neue Zeilen anfügen können. (Ja, die Editiermöglichkeiten des Elementes "Tabelle" sind sehr gut, d.h. viel besser als in einem 2D-Element, aber natürlich nicht im Entferntesten so gut wie bei in einem ganz normalem Text)
19.04.2007, 12:34 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2007 12:47 von Achim.)
' schrieb:Der Header muss zuerst geschrieben werden, daran komme ich nicht vorbei. Habe das Problem stark gekürzt, Später werden bis zu 8 Header + Messwerte immer untereinander stehen, wobei dann auch Messergebnisse in den Spalten 1,2,3... stehen werden, aber das grundsätzliche Problem bleibt beim Schreiben in eine spezifische Zelle?
@Lucki:
Er will ja mehrere Header schreiben...siehe oben...d.h. er klatscht mehrere Messungen aneinander...ich glaube auch nicht, dass er die "Tabellen-eigenen" Row- und Column-Header (rechtsklick aufs Control >> Visible Items >>...) beschreiben will...und ich bin mir sicher, dass er explizit die LV-Tabelle (als Indicator) meint! Und warum passt ein frei geschriebener Header-Text schlecht ins 2D-Array? Meinst du, weil evtl. Text nicht sichtbar ist wegen zu geringer Spaltenbreite? Das wär wirklich nicht so schön...ich würde da aber lieber auf "überlange" Header-Info verzichten, die ich in nem Textfeld locker unterbringen könnte...mir wäre die klare Aufteilung, die die vorgezeichneten Spalten der Tabelle liefern, um einiges wichtiger! Klar kann man im Textfeld auch scrollen, ich finde es sieht aber ohne Trennstriche einfach bescheiden aus...
' schrieb:Kleine Anmerkung:
Das Format 2D-Array hat aber den Nachteil, daß dann der Header aus genau solchen Elementen bestehen muß wie die Daten selbst. Und wenn die Daten mit Header als TXT gespeichert werden sollen, muß spätestens dann die Konvertierung von 2D in Text erfolgen. Also üblich ist das nicht, Daten mit Header in ein 2D-Array hineinzuzwängen. Üblich ist, erst bei der Auswertung die Daten in ein D-Array zu konvertieren, und zwar im Format numerisch, wobei der Header vorher natürlich abzutrennen ist.
Wo ist da der Unterschied zu deiner Darstellung? Auch im formatierten Stringfeld, wie du es vorschlägst, bestehen die Daten aus den gleichen Elementen (=Typ "String") wie in der Tabelle!
Was meinst du mit "üblich ist das nicht,Daten mit Header in ein 2D-Array hineinzuzwängen"? Er will doch erst mal nur anzeigen, das ist doch schon die Auswertung...und überhaupt..."üblich"...das ist doch ne Geschmacksfrage...das hab ich schon tausendmal gesehen, dass die Daten in ner Tabelle angezeigt werden, und nicht in nem numerischen Array...
Ich finde, du drückst dich da ein bisschen ungenau aus...Das von dir so genannte "Format" 2D-Array ist doch völlig unbestimmt...String, Boolesch, Numerisch?
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
So erst einmal danke für die raschen Antworten,
leider bin ich bisher nicht dazu gekommen weiter zu probieren wird wohl erst kommenden Di wieder sein.
Nun noch einmal in Kürze, nicht dass wir aneinander vorbei reden:
- Ich verwende auf meinem FP ein ganz gewöhnliches Tabellen Element (Alles String)
- Die Messwerte (1D Array Zahlen) werden ebenfalls in Strings gewandelt und diese sollen dann in die Tabelle geschrieben werden, in der schon ein Header existiert.
Sprich der Messwert soll z.b. In jetzt auf Excel bezogen z.b. Zelle A 10 ...
Ich habe mal ein Excel File gemacht mit einzelnen Schritten ich hoffe man kann ungefähr erkennen wie ich es meine.
Genau so wie in der Exceltabelle soll es nacher in meiner LabVIEW Tabelle geschrieben werden.
Ich hoffe ich kann es so ein wenig entwirren
und nochmal danke