dezimalwerte nach komma oder punkt durchsuchen

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich lese eine csv ein. jetzt will ich dort realwerte zur sps senden, habe jedoch das problem, dass von dem englischen excel die werte mit nem punkt als dezimalstellte geschrieben werden und vom deutschen mit nem komma. wie kann ich denn in einem script vorgehen, um immer einen wert mit komma an die sps zu senden? denn dann sind die werte ok.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Benson,
im VB-Script-Bereich gibt es da z.B. den Befehl InStr. Die gibt dir die Position eines gesuchten Zeichens in einer Zeichenkette aus. Nun könntest du dieses dann Ersetzen in dem du den linken Teilstring (bis zur gelieferten Pos. nimmst) und dann das neue Zeichen dazwischen schreibst und dann den rechten Teilstring da dran hängst.
Alternativ gäbe es aber auch noch die Funktion Replace ...

Gruß
Larry
 
Die von Excel verwendeten Trennzeichen beim Speichern als csv richten sich nach den regionalen Einstellungen in der Windows-Systemsteuerung.
Beim Einlesen der csv in einem VBS-Skript in WinCC flex RT richten sich die Konvertierfunktionen nach dem Gebietsschema des Windows, unter dem die RT läuft.
Es ist gut möglich, daß die regionalen Einstellungen nicht zueinander passen.

Deshalb würde ich nicht die automatischen Konvertierfunktionen benutzen, sondern unabhängig vom Gebietsschema in Excel eigene VBA-Makros zum Speichern
eines Bereiches als csv erstellen, wo ich die Datei-Ausgabewerte mit festgelegten Trennzeichen erzeuge. Zum Einlesen natürlich auch ein eigenes Makro,
welches die Zeilen selber in einzelne Zahlen zerlegt.
Auf der anderen Seite in WinCC flex RT muß man das "eigene" Gebietsschema-unabhängige Zerlegen selbstverständlich auch programmieren.

Beim selber-Erzeugen der csv-Datei kann man auch gut Kopfinformationen in die ersten Zeilen schreiben, z.B. Kennungen und Format-Versionsnummern,
so daß das Einlese-Script eine unbekannt formatierte csv-Datei gleich ablehnt und keinen Runtime-Error erzeugt.

Ersetzen von Dezimalpunkten durch Kommas in Strings kann man in VBS mit der Replace-Funktion machen oder mit der InStr-Funktion nach den Punkten
oder Kommas suchen. Oder mit der Mid-Funktion den String zeichenweise analysieren.

Hier lauert aber noch eine weitere Falle: Woran soll das WinCC flex Script erkennen, ob Komma oder Punkt als Dezimaltrennzeichen verwendet wurden?
Eine csv-Datei von einem Excel unter deutsch eingestelltem Windows erzeugt kann Kommas als Dezimaltrennzeichen und Punkte als Zifferngruppierungs-
Zeichen (Tausender-Punkt) enthalten! Auch das Listentrennzeichen zwischen den Zahlenwerten muß nicht unbedingt das Semikolon sein!

Dazu fällt mir nur dieser Workarround ein:
die csv-Datei enthält vor den eigentlichen Zahlenwerten 2 oder mehr feste bekannte Zahlenwerte (z.B. 1234,56), die durch die csv-Exportfunktion mit
den in der Datei verwendeten Trennzeichen formatiert wurden, z.B.
Code:
"Trennzeichen-Sample";1.234,56;1.234,56;;
"Wert1";"Wert2";"Wert3";"Wert4";"Wert5"
0;123;0,45;876.543,21;0
Das Einlese-Script kann nun aus der ersten Zeile die verwendeten Trennzeichen ermitteln und auf die nachfolgenden Zahlenwerte anwenden:
die Zifferngruppierungs-Zeichen entfernen, die Dezimaltrennzeichen ggf. von Punkt zu Komma ersetzen (und wenn gewünscht die Zeile in die einzelnen
Zahlenwerte splitten).

Harald
 
Zurück
Oben