AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu String Copy

Ein Thema von ATS3788 · begonnen am 9. Nov 2016 · letzter Beitrag vom 11. Nov 2016
Antwort Antwort
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

Frage zu String Copy

  Alt 9. Nov 2016, 11:41
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
Martin MIchael
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Frage zu String Copy

  Alt 9. Nov 2016, 11:50
.. ist Dein value jetzt 6.5 oder 6,5

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Frage zu String Copy

  Alt 9. Nov 2016, 11:53
Öhm...weil bei einem Value "6,5;" der Copy dir die 5 rauskopiert ?

oder etwas ausführlicher:

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 ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Frage zu String Copy

  Alt 9. Nov 2016, 14:22
Delphi-Quellcode:
// Vorkommastellen:
S := Copy(Value, 1, i-1);

// Nachkommastellen:
S := Copy(Value, i+1, k-1-i);
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#5

AW: Frage zu String Copy

  Alt 9. Nov 2016, 15:45
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 ?
Martin MIchael

Geändert von ATS3788 ( 9. Nov 2016 um 15:51 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Frage zu String Copy

  Alt 9. Nov 2016, 15:57
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);
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker ( 9. Nov 2016 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#7

AW: Frage zu String Copy

  Alt 9. Nov 2016, 16:02
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 ) ;
Martin MIchael
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Frage zu String Copy

  Alt 9. Nov 2016, 18:18
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
Klaus
  Mit Zitat antworten Zitat
galex9

Registriert seit: 3. Nov 2006
17 Beiträge
 
#9

AW: Frage zu String Copy

  Alt 11. Nov 2016, 10:30
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;');
....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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