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 

Format Strings



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!

10.10.2009, 15:47
Beitrag #1

physiker13 Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Jul 2009

8.6
-
en

4040
Oesterreich
Format Strings
hi
ich hab da ein kleines problem mit dem einlesen von daten. die sind folgendermaßen gespeichert:
Code:
*DATA
13.04.2009 16:29:14.680;953,0;27,4;25,8;3,41
13.04.2009 16:29:14.779;953,0;27,4;;
13.04.2009 16:29:14.879;954,0;27,4;;
13.04.2009 16:29:14.979;953,0;27,4;;
13.04.2009 16:29:15.078;952,0;27,4;;
13.04.2009 16:29:15.178;954,0;27,4;;
13.04.2009 16:29:15.277;954,0;27,4;;
13.04.2009 16:29:15.377;954,0;27,4;;
13.04.2009 16:29:15.477;953,0;27,4;;

also zuerst datum und zeit, und dann noch druck und 2 verschiedene temperatur kanäle. ich les das jetzt mit der read from spreadsheet file.vi ein allerdings bekomm ich die trennung der einzelnen kanäle nicht hin.
welchen format string muss ich da verwenden damit der mir die spalten einzeln ins array reinschmeisst?

mein versuch wär mal der gewesen:
Zitat:%s; %,f; %,f ; %,f ; %,f ;

allerdings klappt das nicht so richtigHuh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.10.2009, 16:16
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Format Strings
Mit dem VI "Read from Spreadsheet File" wirst du nicht glücklich werden. Da deine erste Spalte Datum/Uhrzeit ist, kannst du das mit diesem VI eigentlich nur als 2D-Array of Strings einlesen, also Format-String %s, Spalten-Trennzeichen ; (Nebenbemerkung: Der Format-String Eingang gilt immer für jedes Element der gesamten Tabelle, nicht für eine Zeile, so wie du es scheinbar versuchst.)

Dann musst du jede (bzw. zumindest die erste) Spalte des 2D-Array einzeln behandeln.

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
10.10.2009, 16:52
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Format Strings
Hallo physiker,

das speichern scheint ja jetzt schon mal zu klappen - nun macht das wieder einlesen Probleme?

Zu deinem Formatstring:
Es gibt eine wunderbare Übersicht aller FormatCodes in der LV context help. Einfach mal durchklicken.
Einen Formatstring wie "%,f" gibt es nicht! Was du benötigst ist "%f". Da du mit deutschen RegionalSettings arbeitest, würde ich dir noch den Code "%,;" ans Herz legen, damit deine Daten auf jedem PC korrekt geladen werden. Zum Umwandeln des Zeitstrings gibt es auch spezielle Formatcodes, einfach mal die Hilfe durchlesen. Persönlich bevorzuge ich den Tab als Trennzeichen, der "Text" ist meist besser lesbar...

Abgesehen davon: wie Jens schon schrieb, musst du erst die Tabelle als String einlesen und dann die erste Spalte getrennt bearbeiten.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.10.2009, 22:08
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Format Strings
Es gibt noch eine andere Möglichkeit: Zeilenweise mit for-Schleife einlesen und jede Zeile sofort konvertieren.
Und beim Zeitstring hast Du Glück: In Deiner Datei wird haargenau die "Landestypische Datums und Zeitangabe" benutzt. Dafür gibt es das Formatierungszeichen %c. Zusammen mit der Millisekundenangabe und dem immer zu benutzenden Zeitcontainer wird daraus <%c%3u>T.
   
Lv86_img
Sonstige .vi  Plot.vi (Größe: 12,62 KB / Downloads: 428)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2009, 11:40 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 11:44 von physiker13.)
Beitrag #5

physiker13 Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Jul 2009

8.6
-
en

4040
Oesterreich
Format Strings
@GerdW
das erste programm is schon fertig :-) also gleich zum nächsten. dabei benutz ich die daten die ein anderes programm(nicht LabVIEW) speichert. also kann ich an der grundformatierung nix ändern. also leider keine englischen kommas.

zu den formatstrings: in der hilfe stehen zwar einige allerdings weiss ich noch nicht ganz wie man verschiedene formatierungen zusammenfasst. da gibts einige ";"...kann man mit denen nicht eine ganze zeile auf einmal auslesen?

so quasi einen array aus strings wobei man das ";" als trennzeichen angibt. was heisst "%,;%<%c%3u>T;%f;%f" zb genau?

@luki
leider geht das programm bei mir nicht aber so in etwa hätt ichs mir auch vorgestellt. wieso muss man das eigentlich zeilenweise auslesen? kann man nicht gleich die ganze file in einen array speichern und dann zeilenweise verändern?
[code]Error 1 occurred at Scan From String (arg 1) in Plot-1.vi

Possible reason(s):

LabVIEW:
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2009, 12:19 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2010 09:15 von A.Berndsen.)
Beitrag #6

physiker13 Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Jul 2009

8.6
-
en

4040
Oesterreich
Format Strings
bis zum scan from string klappt alles super. dort stimmen die formatstrings ned. ich tipp mal auf den zeitstempel formatireungsstring :-(

Lv86_img


Angehängte Datei(en)
Sonstige .vi  einlesen.vi (Größe: 11,02 KB / Downloads: 375)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
13.10.2009, 13:17 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 13:22 von Lucki.)
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Format Strings
' schrieb:@luki
leider geht das programm bei mir nicht aber so in etwa hätt ichs mir auch vorgestellt. wieso muss man das eigentlich zeilenweise auslesen? kann man nicht gleich die ganze file in einen array speichern und dann zeilenweise verändern?
[code]Error 1 occurred at Scan From String (arg 1) in Plot-1.vi
Ja, dann gehörst Du zu jener bedauenswerten Unterschicht, die kein Laufwerk D besitzt. Da ist nichts zu machen, das Programm wird erst laufen, wenn Du eins nachgekauft hast:mellow:Oder hat jemand eine andere Idee?
Zeilenweise einlesen: Ich habe ja gesagt, daß es eine von mehreren Möglichkeiten ist. Einen lebenswichtigen Vorteil hat das nur beim Einlesen großer Dateien, da die ganze Textdatei gar nicht erst in den Speicher kommt.
Zum Pro und kontra kann ich nur sagen: Deine Argumentation "muß man das eigentlich" klingt ja so, als ob das eine umständliche Methode wäre. Es gibt hier im Thread leider nur das ein funktionierendes Beispiel, und das ist zeilenweises Einlesen. Wenn Du ein funktionierendes alternatives Beispiel vor Augen hättest, käme Dir wahrscheinlich die Erkenntnis: Zeilenweise einlesen ist hier nicht umständlicher, sondern eher einfacher.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2009, 20:56 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 20:57 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.425
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Format Strings
Hallo physiker,

"was heisst "%,;%<%c%3u>T;%f;%f" zb genau?"

"%,;" - das Komma als Dezimaltrennzeichen für den restlichen Formatstring einstellen (wichtig für die Gleitkommazahlen)
"%<>T" - beschreibt den Zeitcontainer mit %c für die lokal eingestellte Formatierung der Zeitdaten und %3u dreistelliger ms-Angabe
";" - ein Semikolon im Text
"%f" - eine Gleitkommazahl
";" - noch ein Semikolon
"%f" - noch eine Zahl...

ScanFromString sucht nach genau den Werten, die der Formatstring beschreibt. Deshalb bietet sich das zeilenweise Auswerten an - oder willst du alle Formatcodes für ein komplettes Array (mit möglicherweise unbekannter Anzahl Zeilen) in den Formatstring schreiben?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.10.2009, 21:28 (Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 21:30 von jg.)
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Format Strings
' schrieb:bis zum scan from string klappt alles super. dort stimmen die formatstrings ned. ich tipp mal auf den zeitstempel formatireungsstring :-(

' schrieb:Ja, dann gehörst Du zu jener bedauenswerten Unterschicht, die kein Laufwerk D besitzt. Da ist nichts zu machen, das Programm wird erst laufen, wenn Du eins nachgekauft hast:mellow:Oder hat jemand eine andere Idee?
Ich glaube, das hat physiker13 nicht gemeint mit Fehler 1. Diese Fehlermeldung kommt bei ihm direkt vom "Scan From String".
Erst mal ein Screenshot:
   
Das obere VI liefert (auch bei mir) eine Fehlermeldung, das untere dagegen nicht. Man beachte den feinen Unterschied, oben sind die Sekundenbruchteile mit Punkt abgetrennt, unten mit Komma.
Im Gegensatz zu Lucki steht mein LabVIEW auf "use localized decimal point", erwartet also ein Komma als Trennzeichen. Daher habe ich offensichtlich ein Problem mit dem Punkt im Zeitstempel-Format als Trennzeichen für die Sekundenbruchteile -> Error 1 at Scan from String!

Ich habe versucht, das durch zusätzliche Vorgabe von %.; im Timeformat oder durch explizite Eingabe des Timeformat-Strings inklusive Punkt, so wie im Screenshot zu sehen, zu lösen. Geht leider nicht. Da muss NI nachbessern, ganz klar...

Lösung für physiker13:
1) Du stellst auf "nicht-lokalisierten Dezimalpunkt" um.
2)    

Und zum Abschluß, in deinem hochgeladenen VI solltest du am "Read from Spreadsheet VI" am Delimiter-Eingang unbedingt ein ";" anschließen:
   

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
14.10.2009, 08:19 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2009 08:21 von Lucki.)
Beitrag #10

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Format Strings
' schrieb:Erst mal ein Screenshot:
[attachment=49862:Image01.png]
Das obere VI liefert (auch bei mir) eine Fehlermeldung, das untere dagegen nicht. Man beachte den feinen Unterschied, oben sind die Sekundenbruchteile mit Punkt abgetrennt, unten mit Komma.

Im Gegensatz zu Lucki steht mein LabVIEW auf "use localized decimal point", erwartet also ein Komma als Trennzeichen. Daher habe ich offensichtlich ein Problem mit dem Punkt im Zeitstempel-Format als Trennzeichen für die Sekundenbruchteile -> Error 1 at Scan from String!

Zuerst mal muß ich erklären, daß ich das Komma als Dezimaltrennzeichen total aus meinem System verbannt habe. Also bereits die Windows-Voreinstellung ist Dezimalpunkt. Es macht demzufolge bei mir in LabVIEW keinen Unterschied, ob ich das lokalisierte oder das LabVIEW-System Dezimalzeichen verwende.

Mir ist schon früher aufgefallen, daß beim Zeitstring der Dezimalpunkt anders behandelt wird als normal. Das sieht man auch schon an der Textdatei im Posting #1: Sie wurde offensichtlich mit Laview generiert, mit Komma els Dezimalzeichen. Das Dezimalzeichen für die Sekundenbruchteile ist aber trotzden ein Punkt!

Und bei beim Rückwärts-Vorgang (Datums/Zeitstring zu Zeitstempel) gibt es die gleichen Merkwürdigkeiten.
   
Mit Dezimalpunkt geht alles in Ordnung, mit Komma gibt es für mich mit dem %c -Formatierungszeichen überhaupt keine Möglichkeit, den String zu konvertieren. Allerdings kommt auch keine Fehleremeldung. Das Zeichen %,; bewirkt nichts, eingefügte Kommas bewirken auch nichts. Wahrscheinlich wird es mit dem ausführlichen Zeit-Formatstring irgendwie gehen, habe jetzt nur keine Lust das zu probieren.
Ich betrachte das aber nicht als Bug, sondern eher als einen Schritt in die richtige Richtung: das deutsche Komma mehr und mehr links liegen zu lassen. (So wie ich es schon für für mich getan habe Mellow)
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
  STDF-Format lambda89 11 10.285 21.09.2011 12:28
Letzter Beitrag: lambda89

Gehe zu: