Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zu String Copy (https://www.delphipraxis.net/190801-frage-zu-string-copy.html)

ATS3788 9. Nov 2016 11:41

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:

Value = 6.5;
Delphi-Quellcode:
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;
So war es auch eine Zeitlang warum bekomme ich mit k-3 hier meinen Integerwert,
wo habe ich meinen Knoten im Kopf

Klaus01 9. Nov 2016 11:50

AW: Frage zu String Copy
 
.. ist Dein value jetzt 6.5 oder 6,5

Grüße
Klaus

Ghostwalker 9. Nov 2016 11:53

AW: Frage zu String Copy
 
Öhm...weil bei einem Value "6,5;" der Copy dir die 5 rauskopiert ?

oder etwas ausführlicher:

Delphi-Quellcode:
S := Copy(Value,i+1 , k-3);
Heißt übersetzte, kopiere von VALUE, aber der Stelle i+1 (also 3), k-3 (also 1) Zeichen.

oder versteh ich grad die Frage nicht ?

Blup 9. Nov 2016 14:22

AW: Frage zu String Copy
 
Delphi-Quellcode:
// Vorkommastellen:
S := Copy(Value, 1, i-1);

// Nachkommastellen:
S := Copy(Value, i+1, k-1-i);

ATS3788 9. Nov 2016 15:45

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 ?

Ghostwalker 9. Nov 2016 15:57

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);

ATS3788 9. Nov 2016 16:02

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 ) ;

Klaus01 9. Nov 2016 18:18

AW: Frage zu String Copy
 
Zitat:

Zitat von ATS3788 (Beitrag 1353155)
Es ist doch egal ob im string 6,5 oder 6.5 steht

Wenn man nach einem Komma in String sucht, dann wird in 6.5 nichts gefunden.
Das ist der Unterschied.

Grüße
Klaus

galex9 11. Nov 2016 10:30

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:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz