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 

Dieses Thema hat akzeptierte Lösungen:

String Array in bin schreiben und lesen EOF



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!

30.08.2016, 21:40
Beitrag #1

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
String Array in bin schreiben und lesen EOF
Hallo

Ich versuche gerade ein 3D String Array in eine Binädatei zu schreiben und zu lesen aber scheinbar passt etwas mit der ermittlung der Dateigröße zu passen.
Die Datei wird zwar gelesen aber im Errorcluster ist anch der Funktion "Aus Binärdatei lesen" immer ein Fehler "LabVIEW: Ende der Datei (EOF) festgestellt." Code 4 auf, die datei wird aber dennoch gelesen.
Habe ich da was falsch verstanden, kann ich bei der Funktion "Aus Binärdatei lesen" auch die Anzahl -1 fest angeben?

PS: Die von mir benötigte String-Arraygröße und der Inhalt kann variieren.


Angehängte Datei(en)
15.0 .vi  R_W_StringArray.vi (Größe: 16,5 KB / Downloads: 303)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.08.2016, 07:36 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2016 07:38 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String Array in bin schreiben und lesen EOF
Hallo Hansi,

wenn ich das hier ausführe, wird mir (ohne EOF-Fehler) angezeigt, dass das gespeicherte und wieder eingelesene 3D-Array identisch zur Vorlage ist:
   

Irgendwas scheinst du anders zu machen…
(Wenn du dein VI mal in LV2014 anhängst, könnte ich vielleicht auch sagen, was das wäre!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 08:46 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2016 08:48 von hansi9990.)
Beitrag #3

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: String Array in bin schreiben und lesen EOF
Zahl geht, versuche mal ein Stringarray. Wink

Ich denke es liegt daran das man bei String in Array nicht einfach Teilen kann, das wird wohl nur bei Zahlen entsprechend zum Datentyp gehen.
Dennoch verstehe ich nicht wofür es am VI "In Binärdatei schreiben" den Anschluss "Array- oder String-Größe voranstellen?" gibt.
Wenn man diesem beim schreiben verwendet dann müsste doch das "Aus Binärdatei lesen" die Größe erkennen wenn man am Anschluss "Anzahl" ein -1 anlegt.

Da ich aber das in der Deutschen Anleitung gelesen hatte:

"Wenn Sie eine Datei mit Anzahl verbinden, die einen anderen als den 32-Bit-Integer-Datentyp aufweist, passt LabVIEW den Typ entsprechend an. Das heißt, dass das VI unter Umständen nicht die gewünschte Datenmenge liest. Wenn Sie –1 mit Anzahl verbinden und die zu lesende Datei nicht mit einem 32-Bit-Integer dargestellt werden kann, gibt LabVIEW einen Fehler aus."

war ich etwass verwirrt (Eine Datei mit Anzahl verbinden, hä?), anschließend habe ich mir mal die Englische Anleitung angesehen:

"If you wire a file size with a data type other than a 32-bit integer to count, LabVIEW coerces the data type to a 32-bit integer. This means the VI may not read the amount of data you intend. If you wire –1 to count and the size of the file you want to read is too large to be represented by a 32-bit integer, LabVIEW returns an error."

Das ist dann also "Lost in translation" Wink

Ich stelle jetzt einfach mal eine Vermutung auf und hoffe das dies hier jemand bestätigen oder dementieren kann:

Wenn man ein True am Anschluss "Array- oder String-Größe voranstellen?" des "In Binärdatei schreiben" gibt wird die Datengröße am Anfang in die Datei (Header?) geschrieben, wenn man ein -1 am Anschluss "Anzahl" des "Aus Binärdatei lesen" anlegt wird die Dateigröße aus der Datei gelesen und alles ist gut?

Wennich es jetzt so wie im Anhang mache erhalte ich keine Fehlermeldung mehr, bin aber nicht sicher ob es dennoch richtig ist.

Leider ist ist die Hilfe zu Labview sehr oft nicht wirklich eindeutig und die Deutsche übersetzung ist sowieso manchmal sehr fragwürdig. Wink


Angehängte Datei(en)
15.0 .vi  3D_array_to_file.vi (Größe: 15,77 KB / Downloads: 285)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 09:08
Beitrag #4

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: String Array in bin schreiben und lesen EOF
Ach ja , hatte überlesen das du die Beispiele in V 2014 benötigst.
Anbei eines mit Angabe der Dateigröße und eines mit -1 am Anzahl Eingang.


Angehängte Datei(en)
14.0 .vi  R_W_StringArray.vi (Größe: 10,96 KB / Downloads: 299)

14.0 .vi  R_W_StringArray-2.vi (Größe: 11,02 KB / Downloads: 275)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 09:31 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2016 09:33 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String Array in bin schreiben und lesen EOF

Akzeptierte Lösung

Hallo Hansi,

Zitat:Dennoch verstehe ich nicht wofür es am VI "In Binärdatei schreiben" den Anschluss "Array- oder String-Größe voranstellen?" gibt.
Damit LabVIEW beim Einlesen des Binärfiles selbständig die Array-/Stringgröße erkennen kann, muss diese natürlich auch in der Datei vorhanden sein: sie wird dann den eigentlichen Daten vorangestellt. Bei einem String halt ein I32 mit der Stringlänge, bei Array pro Dimension ein I32 mit der Dimensionsgröße.

Schau dir deine Binärdatei mal mit einem Hexeditor an: dein 3D-Stringarray mit 2×3×4 Elementen wird durch drei I32-Werte (2,3,4) gleich am Anfang in der Datei signalisiert!

Zitat:Anbei eines mit Angabe der Dateigröße und eines mit -1 am Anzahl Eingang.
Das mit "-1" funktioniert, weil LabVIEW selbständig die Datei analysiert.
Das andere nicht, weil du eine falsche Größenangabe berechnest: wieso teilst du die Dateilänge (133 Bytes) durch 8, um dies als Anzahl der zu lesenden Arrays (!) anzugeben? Da ist doch nur ein 3D-Array in der Datei vorhanden!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 10:10 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2016 10:14 von hansi9990.)
Beitrag #6

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: String Array in bin schreiben und lesen EOF
Ui ja Wink

"Die Werte können Bytes oder Objekte des angegebenen Datentyps sein." hatte ich dann wohl falsch verstanden.
Ich muss nicht die Bytes angeben sondern die Anzahl der Objekte, in meinem Fall 1 (da es nie mehr als ein Array sein wird) oder mit -1 wird es Analysiert..

Zitat:Das mit "-1" funktioniert, weil LabVIEW selbständig die Datei analysiert.

Und dazu muss aber doch auch beim schreiben das "Array- oder String-Größe voranstellen?" auf True stehen oder bzw. sind doch diese beiden abhängig voneinander?
Also wie ich das sehe ist es dann so, wenn ich beim Lesen die -1 anlege muss beim schreiben der "Größe voranstellen?" Wert auf True stehen, wenn ich einfach eine 1 anlege kann der Wert auf False stehen da ich die Anzahl fest angegeben habe (ist aber auch kein Schden wenn er weiter auf True steht).

Im Bild ist das Beispiel einer Bin Datei, auf Offset 00 04 0nd 08 stehen die 02, 03 und 04 wenn du das damit gemeint hast.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.08.2016, 10:25
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String Array in bin schreiben und lesen EOF
Hallo Hansi,

Zitat:"Die Werte können Bytes oder Objekte des angegebenen Datentyps sein." hatte ich dann wohl falsch verstanden.
Ich muss nicht die Bytes angeben sondern die Anzahl der Objekte,
"Bytes" greift nur, wenn eben nur Bytes gelesen werden sollen. Alles andere sind dann "Objekte" mit zum Teil deutlich mehr Speicherbedarf!
Dein 3D-Array of Strings ist eben auch ein (in Zahlen: 1) Objekt…

Zitat:in meinem Fall 1 (da es nie mehr als ein Array sein wird) oder mit -1 wird es Analysiert..
Die Größenangaben werden immer ausgewertet, wenn du "Objekte" wie dein 3D-Array einlesen willst. Wie soll LabVIEW denn sonst die Größe des Arrays erkennen?
Anders herum: einfach ein 3D-Array of Strings einlesen OHNE entsprechende Größenangaben in der Datei zu haben wird fehlschlagen…

Auf die Größenangaben kann man nur verzichten, wenn man Datentypen verwendet, deren Größe schon während der Programmerstellung bekannt ist: einfache Zahlenwerte (I32, DBL, etc.), einfache Cluster aus Zahlenwerten, Arrays mit genau definierter Größe (z.B. ein 1D-Array aus genau 8 I32-Werten) - aber eben KEINE Strings oder Arrays mit variabler Größe!

Zitat:Im Bild ist das Beispiel einer Bin Datei, auf Offset 00 04 0nd 08 stehen die 02, 03 und 04 wenn du das damit gemeint hast.
Ja, genau die 12 Bytes (= 3× I32) meinte ich…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 10:50
Beitrag #8

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: String Array in bin schreiben und lesen EOF
Zitat:Die Größenangaben werden immer ausgewertet, wenn du "Objekte" wie dein 3D-Array einlesen willst. Wie soll LabVIEW denn sonst die Größe des Arrays erkennen?
Anders herum: einfach ein 3D-Array of Strings einlesen OHNE entsprechende Größenangaben in der Datei zu haben wird fehlschlagen…

Ist dann egal ob ich in meinem Fall (im .Bin ist immer die Größenangabe enthalten) -1 oder 1 anegebe?
Der Anzahl Anschluss hat dann beim Datentyp Array die Bedeutung 1= ein Array (Objekt) und -1 ermittle 1 Array (Objekt) und die Arraygröße selbst wird dann aus der Größenangabe im File ermittelt und demnach würde es bei Array keine Anzahl größer 1 geben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2016, 10:53
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String Array in bin schreiben und lesen EOF
Hallo Hansi,

Zitat:Der Anzahl Anschluss hat dann beim Datentyp Array die Bedeutung 1= ein Array (Objekt)
Ja.

Zitat: und -1 ermittle 1 Array (Objekt)
Nein: "-1" bedeutet "lese alle Objekte aus der Datei"

Zitat:die Arraygröße selbst wird dann aus der Größenangabe im File ermittelt
Ja.

Zitat:demnach würde es bei Array keine Anzahl größer 1 geben?
Das liegt aber nur daran, dass du eben nur einmal ein Array in der Datei speicherst…
Du könntest ja (theoretisch) auch mehr als nur ein Array in der Datei speichern!

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

hansi9990 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 180
Registriert seit: Mar 2015

2019
2014
DE

96xxx
Deutschland
RE: String Array in bin schreiben und lesen EOF
Aah, Licht an. Wink

Herzlichen Dank für die Erklärung und Unterstützung. Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  PropertyNode Referenz zu Allen Array Elementen (XML schreiben) TpunktN 9 7.470 12.05.2020 08:08
Letzter Beitrag: TpunktN
  Dateien lesen und schreiben stoa 4 4.906 17.03.2020 11:50
Letzter Beitrag: stoa
  Array in XML schreiben MarcoN 7 9.611 24.02.2020 16:11
Letzter Beitrag: TpunktN
  Array nach String durchsuchen MarcoN 5 8.204 02.12.2019 11:33
Letzter Beitrag: MarcoN
  bestimmte Werte aus Array lesen psypher 5 7.532 12.04.2016 09:21
Letzter Beitrag: psypher
  String in INI File schreiben galilio 4 7.597 08.02.2016 13:37
Letzter Beitrag: galilio

Gehe zu: