![]() |
Frage zu String Copy
Hallo
Ich bin gerade dabei mir eine Interface Arduino CmdMessages über Serieller Com Port zu schreiben Value hat den Wert Zitat:
Delphi-Quellcode:
So war es auch eine Zeitlang warum bekomme ich mit k-3 hier meinen Integerwert,
function TCmdMessenger.GetIntValue(Value : string) : Integer;
var S : string; i,k,l : integer; begin Value := Trim(Value); i := pos(',', Value); // i ist 2 k := pos(';', Value); // k ist 4 l := Length(Value); // Länge ist 4 S := Copy(Value,i+1 , k-3); // Hier ist das Problem es müsste doch k-1 heißen Result := StrToIntDef(S,-1); end; wo habe ich meinen Knoten im Kopf |
AW: Frage zu String Copy
.. ist Dein value jetzt 6.5 oder 6,5
Grüße Klaus |
AW: Frage zu String Copy
Öhm...weil bei einem Value "6,5;" der Copy dir die 5 rauskopiert ?
oder etwas ausführlicher:
Delphi-Quellcode:
Heißt übersetzte, kopiere von VALUE, aber der Stelle i+1 (also 3), k-3 (also 1) Zeichen.
S := Copy(Value,i+1 , k-3);
oder versteh ich grad die Frage nicht ? |
AW: Frage zu String Copy
Delphi-Quellcode:
// Vorkommastellen:
S := Copy(Value, 1, i-1); // Nachkommastellen: S := Copy(Value, i+1, k-1-i); |
AW: Frage zu String Copy
Danke für die Antworten
Ich weiß das dies eine blöde Frage ist an odd Question sorry about this. Es ist doch egal ob im string 6,5 oder 6.5 steht was mich verwunder als ich es noch nicht in der Funktion hatte hat es richtig mit S := Copy(Value,i+1 , k-1); Was mir einfällt kann es sein das der Compiler einen Ansi String annimmt ? |
AW: Frage zu String Copy
Ich vermute mal das der Denkfehler im letzten Parameter von Copy liegt :)
Copy(<sourcestring>,FromPosition,lengthtocopy) Der letzte Parameter gibt die Länge an (also wieviele Zeichen kopiert werden sollen), nicht bis zu welcher Position kopiert werden soll :) Wenn also k in beiden Fällen 4 ist passiert folgendes: copy(value,i+1,k-1) -> Ergebnis "5;" (Der Compiler checkt von selbst, das nach dem ";" der String zu ende ist und hört auf) copy(value,i+1,k-3) -> Ergbnis "5" Um immer den String zwischen zwei Positionen zu bekommen nimm: copy(value,i+1,(k-i)-1); |
AW: Frage zu String Copy
Hallo
Oh sorry das ich euch mit so einer blöden Frage genervt habe Ich mache in letzter Zeit viel mit Arduino und somit C herum und da ist mir nicht aufgefallen das es function Copy(S: <string or dynamic array>; Index: Integer; Count: Integer): string; Count heißt und nicht until so is es richtig. S := Copy(Value,i+1 , k - i - 1 ) ; |
AW: Frage zu String Copy
Zitat:
Das ist der Unterschied. Grüße Klaus |
AW: Frage zu String Copy
Wie wäre es damit
Code:
function TCmdMessenger.GetIntValue(Value : string) : Integer;
begin Value := Trim(Value); Value := StringReplace(Value, ';', '', [rfReplaceAll, rfIgnoreCase]); Value := StringReplace(Value, '.', ',', [rfReplaceAll, rfIgnoreCase]); Result := Trunc(StrToFloatDef(Value, -1)); end; .... GetIntValue('6.5;'); .... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz