String To Int, problem. & string split (gelöst)
-
ich habe ein problem mit dem Convertiren von String in Int.
ich nuzte "Microsoft Visual C++ 2008 Express Edition"String^ s = serialPort1->ReadLine(); for(int i=0; i<s->Length; i++) { String^ svar = s->Substring(i,1); textBox1->Text = svar; int s1 = Convert::ToInt32(svar); //progressBar1->Value = s1; }
ich habe im string s daten wie z.b. "25,123,1"
meine anwendung hängt sich auf, wenn sie versucht ein komma
in einen int zu convertieren.wie kann ich das verhindern?
und wie kann ich die drei werte die das komma trennt
in einzelne int variablen bringen?
-
z.B. so...
Mit Split(..) kannst Du den String in die Teile zerlegen (wobei das Komma hier als Separator dient).
String^ str = L"25,123,1"; array<String^>^ coll = str->Split(L','); for each (String^ s in coll) { int i = Convert::ToInt32(s); }
-
ich habs jetzt so.
String^ s1 = serialPort1->ReadLine(); textBox1->Text = s1; array<String^>^ coll = s1->Split(','); for(int i = 0; i < coll->Length; i++) { for each (String^ s1 in coll) { if(i=0) { int sl = Convert::ToInt32(s1); progressBar1->Value = sl; } if(i=1){ int sm = Convert::ToInt32(s1); progressBar2->Value = sm; } if(i=2){ int sr = Convert::ToInt32(s1); progressBar3->Value = sr; } } }
aber ich bekomm nur coll[2] auf den drei progressBar's zu sehen.
obwohl im coll-array alle 3 werte drin sind.
wie bekomme ich die drei werte in einzelne variablen?
-
if(i=0) // <-- sollte if (i == 0) sein
Ausserdem ist es völlig sinnlos wie Du die erhaltene Collection benutzt. Du iterierst zweimal (verschachtelt) über die Collection.
for(int i = 0; i < coll->Length; i++) // Über alle Elemente Iterieren { for each (String^ s1 in coll) // Jeweils pro Element nochmals über alle Elemente Iterieren { } }
Zudem sind noch andere Unklarheiten (wie z.B. dass Du trotzdem s1 konvertierts und nicht die einzelnen Teilstrings).
Ich schlage folgendes vor:
String^ s1 = serialPort1->ReadLine(); textBox1->Text = s1; array<String^>^ coll = s1->Split(','); if (coll.Length == 3) { int val = 0; val = Convert::ToInt32(coll[0]); progressBar1->Value = val; val = Convert::ToInt32(coll[1]); progressBar2->Value = val; val = Convert::ToInt32(coll[2]); progressBar3->Value = val; } else { // Fehler !! }
-
na das is ja um ecken einfacher gedacht als meins.
dank dir, ich werds heut abend gleich mal testen.-------edit------
an stelle von "if (coll.Length == 3)" mit punkt
hab ich "if (coll->Length == 3)" mit pfeil, machen müßen.
aber es klappt spitze, dank dir.hier der download wenn er das tool mal testen will.
http://www.proudmoore.de/ele/a-car/CAP Sensor Display.exe