000
25.08.2009, 16:50 Uhr
~JuliaZ
Gast
|
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.86
Die 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 Hilfe 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.
C++: |
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)); } } } } } } } } } } }
|
|