10.10.2009, 15:47
Beitrag #1
|
physiker13
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 richtig
|
|
|
10.10.2009, 16:16
Beitrag #2
|
jg
CLA & CLED
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.
|
|
|
10.10.2009, 22:08
Beitrag #4
|
|
|
13.10.2009, 12:19
(Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2010 09:15 von A.Berndsen.)
Beitrag #6
|
|
|
13.10.2009, 13:17
(Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 13:22 von Lucki.)
Beitrag #7
|
Lucki
Tech.Exp.2.Klasse
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.
|
|
|
13.10.2009, 20:56
(Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 20:57 von GerdW.)
Beitrag #8
|
GerdW
______________
Beiträge: 17.480
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?
|
|
|
13.10.2009, 21:28
(Dieser Beitrag wurde zuletzt bearbeitet: 13.10.2009 21:30 von jg.)
Beitrag #9
|
jg
CLA & CLED
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.
|
|
|
14.10.2009, 08:19
(Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2009 08:21 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
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 )
|
|
|
| |