Hi,
erstmal eine Kleinigkeit vorweg, wenn Du Code posten mchtest, dann benutze dafr am Besten die Delphi-Tags, die finden sich ber dem Eingabefeld, wo Du den Beitrag eingibst. Einfach einmal auf Delphi-Code clicken, Code einfgen und auf Delphi-Code* Clicken, dann wird der Code einfach schner dargestellt (nur fr's nchste mal, ist ja nichts Schlimmes!)
Zitat von
Delphieinsteiger:
Jetzt habe ich alle Werte die der Logger aufgenommen hat(Bytes) als String in meiner Memobox.aber wie kriege ich diese Werte umgewandelt?ich wrde meinen Arrays ja z.B am liebsten eine 23 fr 23 bergeben.
Wie genau sehen denn die Daten aus die Du bekommst. Ich kenne die SerialNG-Komponente nicht (benutze immer TComPort), aber an sich bekommst Du beim Zugriff auf die serielle Schnittstelle immer etwas wie Bytes, die sehr hufig auch als String interpretiert werden mssen.
Bei der bertragung gibt es aber verschiedene Mglichkeiten:
- Es werden Daten fester Lnge bertragen
- Es wird ein Festes Datum (Anzahl der folgenden Daten) bertragen (
- Es werden Start- und/oder Endzeichen bertragen (Datum endet, sobald bestimmtes Zeichen empfangen wurde)
Letzteres umfsst natrlich auch die mglichen Kombinationen. Das Problem bei der RS-232-Schnittstelle ist eben, dass die Kommunikation asynchron ist, Du bekommst einfach nur mehrere Bytes, ob die zusammengehren oder nicht, ob ein Datum komplett bertragen wurde, das musst Du selbst entscheiden. Vorab also die Warnung, dass Du hier ggf. drauf achten msstest (kann Dir aber eventuell auch von SerialNG abgenommen werden).
Wenn Du jetzt also ein Datum empfngst, welche Form hat es denn? Hast Du bereits einen String wie '23' oder gar '23'? Und mchtest Du daraus jetzt ein Integer machen? Dazu kannst findest Du in der
Unit SysUtils (in der Uses Klausel angeben) die Funktion StrToInt bzw. auch TryStrToInt. Letztere fngt dabei Fehler ab, wenn Du z.B. versuchst aus '1a0' eine Zahl zu machen. Die Funktion liefert ein Boolschen Wert zurck, ob die Umwandlung geklappt hat.
Fr das Beispiel she dann die Umwandlung ungefhr so aus:
Delphi-Quellcode:
var temp: Integer;
begin
// input ist der String, den Du in eine Temperatur umwandeln mchtest
// Wenn Du das Grad-Zeichen dran httest, musst Du das vorher entfernen
// wenn nicht, die folgende Zeile weglassen
input := copy(input, 1, Pos('')); // Kopiert aus dem String input alles vom ersten Zeichen bis zum ersten Auftreten von ''
if not TryStrToInt(input, temp) then
begin
// Fehler bei der Umwandlung, irgendwas machen
end;
// in Temp steht nun der Zahlenwert der Temperatur
end;
Der umgekehrte Weg ist dann noch leichter, hier scheiden Fehler in der Eingabe aus. Ein Integer ist immer mit einer gltigen Zahl belegt und kann ber IntToStr in einen String umgewandelt werden (ebenfalls in der
Unit SysUtils deklariert).
Delphi-Quellcode:
var temp: String;
begin
// input ist der Integer Wert, den Du in einen Temperatur-String umwandeln mchtest
temp := IntToStr(input);
// oder wenn Du ein Grad Zeichen dran haben mchtest
temp := IntToStr(input) + '';
end;
Das ist jetzt natrlich nur der Weg, wenn Du ein einzelnen String oder Integer-Wert umwandeln mchtest. Du sagtest ja, dass Du gleich eine ganze Menge davon hast. Was Du also tun musst ist, diesen zu zerlegen. Wie man das am Einfachsten macht hngt aber eben von dem Aufbau ab. Je nachdem ob es ein Trennzeichen gibt oder ein Datum eine feste Lnge hat kommen unterschiedliche Wege in Frage, sag einfach erstmal wie die Daten aufgebaut sind.
Gru Der Unwissende