LabVIEWForum.de
TXT-Tabelle an beliebiger Stelle bearbeiten? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: TXT-Tabelle an beliebiger Stelle bearbeiten? (/Thread-TXT-Tabelle-an-beliebiger-Stelle-bearbeiten)

Seiten: 1 2


TXT-Tabelle an beliebiger Stelle bearbeiten? - ElectronicBodyMoritz - 10.05.2007 12:56

Grüße

ich habe folgendes Problem:
Ich lese aus einer .txt-Datei aus, und erstelle daraus ein Array, aus welchem ich, in einer Schleife immer in ein eindimensionales Array entnehme das folgende Daten enthält:
(Steckernr/PIN/Add1/Add2/Add3/Status). Nach diesen Angaben führe ich eine Automatische Prüfung durch.
Jetzt möchte ich die letzte Position des obigen Arrays z.b. von 1 auf 0 setzen und das direkt in der ausgelesenen Datei an antsprechender Stelle verändern.
(Hintergrund. Das Kabel ist unterdessen gebrochen, und soll aus der Prüfliste entnommen werden, um in den folgenen Durchläufen ignoriert zu werden!)

Ich ärgere mich selbst, aber irgendwie hat die Funktion "In Tabellkalkulationsdatei schreiben" im Gegensatz zu "Aus Tabellenkalkulationsdatei lesen" irgendwie keine Möglichkeit eine bestimme Zeile rauszupicken und diese zu verändern, ohne die komplette Liste vorher als verändertes Array abzuspeichern und komplett mit Änderunegn wieder in das File zu schreiben (dauert mir zu lange). Kann ich nicht irgendwie nur eine Zeile oder sogar ein Element (Zeile x, Spalte y) der Tabelle austauschen?

Das VI ist angehängt (Hoffe für 8.0..). Ignoriert die ganzen Cases mal getrrost die sind für die unterschiedlichen Prüfgeräte und Modi gedachtWink

[attachment=6555]


TXT-Tabelle an beliebiger Stelle bearbeiten? - Achim - 10.05.2007 13:26

Du könntest mal ins innere von "Write Spreadsheet" gucken...da wird "nur" ein Textfile geschrieben...und man kann ne Position in der Datei angeben...das müsstest du dir umbauen...und - VORSICHT - unter anderem Namen speichern!

Ich versteh aber nicht, warum dir das neuerliche Schreiben des kompletten Arrays zu lange dauert...ist es so groß, d.h. viele tausend Werte lang? Ansonsten geht es doch ruckizucki...verwendest du für's ersetzen im Array die Funktion "ReplaceArraySubset"? Die ist doch auch recht schnell...allerdings ist es war, das Array-Operationen in LV relativ rechenintensiv sind...bei sehr großen Arrays gibts da evtl. schon mal Wartezeiten

Gruss
Achim


EDIT: Hab dein VI mal aufgemacht...wo ersetzt du denn was? Konnt ich nicht finden...mach doch mal nen Screenshot und kreise es ein...


TXT-Tabelle an beliebiger Stelle bearbeiten? - ElectronicBodyMoritz - 14.05.2007 08:14

' schrieb:Du könntest mal ins innere von "Write Spreadsheet" gucken...da wird "nur" ein Textfile geschrieben...und man kann ne Position in der Datei angeben...das müsstest du dir umbauen...und - VORSICHT - unter anderem Namen speichern!

Würde ich gerne, aber wenn ich die Schreibsperre aufhebe und mir eine Kopie des VIs inklusive SubVIs erstelle kann ich mein String-Array nicht mehr mit den eingängen verbinden, da diese egtl DBL sind. Hat das irgendwas mit Polymorphie des VIs zu tun? Kenne mich da lieder nicht so aus...

EDIT: Okay das Problem habe ich gelöst, ich versuche jetzt mal das VI abzuändern!

' schrieb:EDIT: Hab dein VI mal aufgemacht...wo ersetzt du denn was? Konnt ich nicht finden...mach doch mal nen Screenshot und kreise es ein...

In der letzten Schliefe kurz bevor ich das WriteToSpreadsheet aufrufe, ersetze ich den letzten Wert des Clusters auf Position (Spalte) 5.

Zum Thema Druchlaufzeiten... also bei mir dauert es gute 4 bis 5 sekunden wenn ich in einer schleife eine textdatei mit 512x5 ZeilenxSpalten in eine txt Datei schreibe. Dazu ist zu sagen dass aber in jedem Durchlauf auch 32 analoge Eingänge gelesen werden. Und das ist mir zu lange um es während des Tests immer wieder vollständig zu schreiben.


TXT-Tabelle an beliebiger Stelle bearbeiten? - ElectronicBodyMoritz - 14.05.2007 08:54

OKay denke die Stelle im VI gefunden zu haben von der aus die Positionsmarke einfließt. Ich kann da ja einen numerischen Wert der die Byte von Start oder Ende angibt übergeben. Mein Problem ist nur woher weiß ich wieviel Byte welche Stelle in der Textdatei sind? Er fügt mi die Änderung irgendwie nicht dort ein wo er soll, aber er fügt ein! Das ist ja schon mal was ^^


TXT-Tabelle an beliebiger Stelle bearbeiten? - Lucki - 14.05.2007 09:09

Also ich würde die Datei einlesen und in ein zweidimensionales Text-Array umwandeln. Diesen Array dann darstellen mit dem Element "Tabelle". "Tabelle" ist nichts anderes als ein zweidimensionales Text-Array, aber mit dem Unterschied, daß es da genau die von Dir gewünschten Editiermöglichkeiten gibt, die es bei einem normalen Array nicht gibt. (Auswahl mit rechter Maustaste).


TXT-Tabelle an beliebiger Stelle bearbeiten? - ElectronicBodyMoritz - 14.05.2007 09:15

' schrieb:Also ich würde die Datei einlesen und in ein zweidimensionales Text-Array umwandeln. Diesen Array dann darstellen mit dem Element "Tabelle". "Tabelle" ist nichts anderes als ein zweidimensionales Text-Array, aber mit dem Unterschied, daß es da genau die von Dir gewünschten Editiermöglichkeiten gibt, die es bei einem normalen Array nicht gibt. (Auswahl mit rechter Maustaste).

Hmm aber das würde doch dann wieder darauf hinauslaufen, dass ich eine Zeile editiere aber um diese Änderung zu speichern, wieder das komplette Array abspeichere- was ich ja letztendlich vermeiden möchte. Oder sehe ich das falsch? Weis auch nicht genau was du jetzt meinst ehrlich gesagt, weil ich lese die Datei ja ein und wandle sie erstmal um, um auf einzele Zeilen zugreifen zu können.


TXT-Tabelle an beliebiger Stelle bearbeiten? - Achim - 14.05.2007 09:25

' schrieb:In der letzten Schliefe kurz bevor ich das WriteToSpreadsheet aufrufe, ersetze ich den letzten Wert des Clusters auf Position (Spalte) 5.

Zum Thema Druchlaufzeiten... also bei mir dauert es gute 4 bis 5 sekunden wenn ich in einer schleife eine textdatei mit 512x5 ZeilenxSpalten in eine txt Datei schreibe. Dazu ist zu sagen dass aber in jedem Durchlauf auch 32 analoge Eingänge gelesen werden. Und das ist mir zu lange um es während des Tests immer wieder vollständig zu schreiben.

Hi,

mal zwischenrein...

1. Ersetzt du nirgends was in nem Cluster, sondern nur in nem 1D-Array
2. Schreibst du kein 2D-Array, sondern nur ein 1D-Array
3. Liegt dein Problem mit den Durchlaufzeiten nicht beim Array-verändern, sondern beim Einlesen...wobei 4-5 Sekunden für ein paar Analog-Eingänge schon seltsam sind...

Ich hab mal das schreiben von 512x5 Werten probiert, siehe Screenshot...das dauert maximal 6 ms
[attachment=6591]

Gruss
Achim


TXT-Tabelle an beliebiger Stelle bearbeiten? - Lucki - 14.05.2007 09:30

' schrieb:Hmm aber das würde doch dann wieder darauf hinauslaufen, dass ich eine Zeile editiere aber um diese Änderung zu speichern, wieder das komplette Array abspeichere- was ich ja letztendlich vermeiden möchte. Oder sehe ich das falsch? Weis auch nicht genau was du jetzt meinst ehrlich gesagt, weil ich lese die Datei ja ein und wandle sie erstmal um, um auf einzele Zeilen zugreifen zu können.
Dann verstehe ich Dich auch nicht. Du liest Die Datei ein, die Daten befinden sich dann im Speicher, die editierst diese Daten nach Belieben - aber es zwingt Dich doch keiner, diese Daten nach jeder Änderung abzuspeichern oder überhaupt jemals wieder abzuspeichern? Die Tabelle sollte wegen der Editierbarkeit natürlich Bedienelement sein, das erstmalige Füllen der Tabelle mit den auf HD gespeicherten Daten geschieht über ein lokale Variable.
Und in Deinem Hauptprogramm, wenn Du ein bestimmte Zeile brauchst, benutzt Du natürlich immer die aktualisierte Tabelle und nicht die Daten im Speicher.


TXT-Tabelle an beliebiger Stelle bearbeiten? - ElectronicBodyMoritz - 14.05.2007 10:22

' schrieb:Dann verstehe ich Dich auch nicht. Du liest Die Datei ein, die Daten befinden sich dann im Speicher, die editierst diese Daten nach Belieben - aber es zwingt Dich doch keiner, diese Daten nach jeder Änderung abzuspeichern oder überhaupt jemals wieder abzuspeichern? Die Tabelle sollte wegen der Editierbarkeit natürlich Bedienelement sein, das erstmalige Füllen der Tabelle mit den auf HD gespeicherten Daten geschieht über ein lokale Variable.
Und in Deinem Hauptprogramm, wenn Du ein bestimmte Zeile brauchst, benutzt Du natürlich immer die aktualisierte Tabelle und nicht die Daten im Speicher.

Hmm ja ich bin ja auch erst Neuling in LabVIEW...
kömnntest du mir mal posten wie so ein Aufruf aussieht? Ich hätte kein Problem damit die Tabelle auszulesen...in ein Array (oder was auch imemr umzuwandeln) und nach nem kompletten Durchlauf oder einiger Zeit einfach mal sicherheitshalber zwischenzuspeichern...

Habe noch nie mit lokalen Variablen gearbeitet vllt könntest du mir mal kurz sagen, was deren Besonderheit ist...


TXT-Tabelle an beliebiger Stelle bearbeiten? - Achim - 14.05.2007 10:35

' schrieb:Also ich würde die Datei einlesen und in ein zweidimensionales Text-Array umwandeln. Diesen Array dann darstellen mit dem Element "Tabelle". "Tabelle" ist nichts anderes als ein zweidimensionales Text-Array, aber mit dem Unterschied, daß es da genau die von Dir gewünschten Editiermöglichkeiten gibt, die es bei einem normalen Array nicht gibt. (Auswahl mit rechter Maustaste).

Ich versteh da wohl was nicht...er braucht doch überhaupt keine manuellen Editiermöglichkeiten, oder? Wenn ne automatisierte Messung fehlschlägt, wird in seinem Array ein Wert (automatsich) getauscht, damit diese Messung beim nächsten Durchlauf nicht mehr durchgeführt wird.

Da kann man doch schlicht und einfach "ReplaceArraySubset" machen...und ob man jetzt die ganze Liste (=2D Array) mit jedem Durchlauf neu speichert oder nur z.b. jedes zehnte Mal sollte doch wurscht sein...wie weiter oben schon mal gesagt, dauert das bei mir ca. 6ms...

A.