Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - ComPort Daten in Integer umwandeln
Krish - So 19.02.12 15:06
Titel: ComPort Daten in Integer umwandeln
So es ist mal wieder so weit, ich habe ein Problem bei dem ich nicht weiterkomme.
Ersteinmal zu den Grundlagen.
Ich möchte ein Programm schreiben, das Daten aus der seriellen Schnittstelle auswertet. Dabei handelt es sich um Zeiten einer Carrerarennbahn.
Über den ComPort kommen Datensätze die aus 12 stelligen Zahlen bestehen.
1. Ziffer: Spieler (1 oder 2)
2. bis 4. Ziffer: Rundenzahl (001 bis 999)
5. bis 12. Ziffer: Zeit in tausendstel Sekunden (0 bis 99999999)
und hier das programm:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var Daten, Spur, Runde, Zeit : String; Z : LongInt; begin ComPort.ReadStr(Daten, Count); Memo.Text := Memo.Text + Daten; Spur := leftstr(Daten,1); Runde := midstr(Daten,2,3); Zeit := midstr(Daten,5,8); Z := StrToInt(Zeit); if spur = IntToStr(1) then begin label3.caption := runde; label5.caption := inttostr(Z); end else begin label8.caption := runde; label10.caption := inttostr(Z); end; end; |
Das aufteilen des Strings in die einzelnen Daten (Spieler, Runde, Zeit) ist kein Problem.
Jedoch habe ich ein Problem den Sring 'Zeit' in einen LongInteger umzuwandeln. Diesen Wert würde ich später noch für andere Unterprogramme benötigen.
Beim testen des Programms kommt immer die Fehlermeldung: " ********(belibige Ziffern) ist kein gültiger Integer Wert. "
Wo liegt nun mein Fehler?
LG Krish
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
jaenicke - So 19.02.12 15:20
Krish hat folgendes geschrieben : |
| Beim testen des Programms kommt immer die Fehlermeldung: " ********(belibige Ziffern) ist kein gültiger Integer Wert. " |
Was für Ziffern sind das denn? Sieht es denn aus wie eine gültige Zahl? Sind da vielleicht Steuerzeichen dabei (solltest du im Debugger sehen können)?
Krish - So 19.02.12 15:25
Pro Stelle sind das nur Ziffern von 0 bis 9 (z.B. 132435). Es sollte also ein Gültiger Integer wert sein jedoch kommt immer dieser Fehler.
jaenicke - So 19.02.12 15:27
Dann müssen da Steuerzeichen drin drin. Mach einmal einen Haltepunkt auf die Zeile und schau bevor die ausgeführt wird, was wirklich in dem String drin steht...
Funktioniert vielleicht ein Trim um diese zu entfernen?
Krish - So 19.02.12 15:40
In diesem Srting stehen nur Zahlen. Das kann ich ja in dem Kontrollfenster überprüfen.
Als Beispiel:
Über den ComPort kommt folgender String: 100514023
1 005 14023
1 -> Spieler 1
005 -> Runde 5
14023 -> Zeit: 14023 ms
Wie gesagt das Zerlegen Funktioniert jedoch kann ich den neuen String(Zeit) nicht in eine LongInt Variable konvertieren.
jaenicke - So 19.02.12 15:52
Hier hast du ja weniger Stellen. Vermutlich befinden sich dahinter schlicht noch Steuerzeichen wie geschrieben. Wie sieht es denn aus im Debugger? Wie im ersten Bild? Oder doch wie im zweiten?
Krish - So 19.02.12 16:07
Entschuldige die dumme Frage aber wie kann ich mir das denn so im Debugger anzeigen lassen?
Mir wird da kein Wert angezeigt.
jaenicke - So 19.02.12 16:12
Maus drüber halten, ansonsten kann das deine Version vielleicht nicht, dann markiere einfach die Variable und drück Strg + F7. ;-)
Krish - So 19.02.12 16:17
So wie du richtig vermutet hast sieht es wie im unteren Bild aus mit den Steuerzeichen.
jaenicke - So 19.02.12 16:21
Du behandelst auch nicht, wenn du nur einen Teil der Daten in einem Rutsch bekommst. Aber wie dem auch sei, du kannst Trim ausprobieren.
Wenn das nicht geht, musst du den String durchgehen und schauen wie lange Ziffern drin stehen. Wenn das Endzeichen immer fest ist, kannst du auch Pos benutzen um dessen Position zu finden.
Krish - So 19.02.12 16:36
Danke für die umfassende Fehleranlyse. TrimRight hat das ganze Problem gelöst.
Jetzt funktioniert es endlich wie es soll.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!