String^ variabler länge nach double
-
Hallo,
ich lese folgende Eingabedatei:
Auschnitt der Datei:
09.01.2007 13:15:59 4.904
09.01.2007 13:16:01 4.93
09.01.2007 13:16:03 4.904
09.01.2007 13:16:05 4.894
09.01.2007 13:16:07 4.92
09.01.2007 13:16:09 4.929
09.01.2007 13:16:11 4.852
09.01.2007 13:16:13 4.875
09.01.2007 13:30:15 4.888
09.01.2007 13:30:17 4.863
09.01.2007 13:30:19 4.86Die Anzahl der Vorkomma- und Nachkommastellen kann von ein bis drei Stellen variieren. Nach dem Messwert kommt nichts mehr auch keine Leerzeichen. Die Datei hat somit eine variable Länge.
Ich muss also prüfen wie lang die Zahl eigentlich ist. Dazu verwende ich nun try und catch wie im Folgenden zu sehen. Das dauert aber recht lange (bei 4500 Sätzen 33 sec; wobei später 2.7 mio Sätze kommen ... dann wirds langsam inakzeptabel)
Wie bekomme ich den Messwert einfacher und vor allem schneller von String^ str in meine double variable messwerttmp? Bin für sehr dankbar.
Zum Quellcode: Ich schneide mir hier mit Substring die Vorkommastellen und die Nachkommastellen extra raus und befülle danach die double variable. Dirket nach double geht nicht da er mir das komma verschluckt.
try { messwerttmp = Convert::ToDouble(str->Substring(20,3)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(24,3)) /1000); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,2)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(23,3)) /1000); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,1)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(22,3)) /1000); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,3)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(24,2)) /100); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,2)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(23,2)) /100); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,1)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(22,2)) /100); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,3)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(24,1)) /10); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,2)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(23,1)) /10); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,1)); messwerttmp = messwerttmp + (Convert::ToDouble(str->Substring(22,1)) /10); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,3)); } catch(ArgumentOutOfRangeException^) { try { messwerttmp = Convert::ToDouble(str->Substring(20,2)); } catch(ArgumentOutOfRangeException^) { messwerttmp = Convert::ToDouble(str->Substring(20,1)); } } } } } } } } } } }
-
Lass einfach den zweiten Parameter von
str->Substring
weg, dann bekommst du den kompletten String.
-
devkid schrieb:
Lass einfach den zweiten Parameter von
str->Substring
weg, dann bekommst du den kompletten String.Wenn ich den nach double konvertier ist das Komma weg. Da ich nicht weiss wie viele Nach- bzw Vorkommastellen der wert hatte kann ich ihn auch nicht nachträglich einfügen.
-
JuliaZ schrieb:
Wenn ich den nach double konvertier ist das Komma weg.
Dann konvertiere doch mit invarianter Lokale.