AGB  ·  Datenschutz  ·  Impressum  







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

Copy(S, 1) macht was? Wo ist der 3 Parameter?

Ein Thema von Rolf Frei · begonnen am 18. Jul 2022 · letzter Beitrag vom 5. Sep 2022
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
630 Beiträge
 
Delphi 11 Alexandria
 
#1

Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 18:04
Delphi-Version: 5
Habe in Data.DB.pas im folgenden Code ein Copy() gefunden, das ich so nicht kenne:
Delphi-Quellcode:
procedure TField.SetEditText(const Value: string);
begin
  if Assigned(FOnSetText) then
  begin
    var S: string := Copy(Value, 1);
    FOnSetText(Self, S);
  end
  else
    SetText(Value);
end;
Diese Zeile mit dem Copy ist in D11 dazugekommen und unterscheidet sich von D10.3. Mich hat nun gewundert was dieser Copy Befehle da genau macht, da ich den nur mit 3 Prametern kenne. Ein Blick in die System Unit hat auch nicht geholfen, da dort der Befehl auch 3 Parameter hat und keiner davon eine Default zu sein scheint. Jemand eine Idee was da wirklich gemacht wird und wieso man den betroffen Code so angeändert hat? Früher wurde da FOnSetText(Self, Value) aufgerufen und hier sieht es aus, als würde nur das 1. Zeichen als Feldtext übergeben?!

Geändert von Rolf Frei (18. Jul 2022 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.393 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 18:41
Dabei wird einfach nur bis zum Ende des Strings kopiert. Das ist also wie:
Copy(Value, 1, MaxInt);

Das kannst du ja auch einfach selbst testen:
Delphi-Quellcode:
  var a := 'Testen';
  ShowMessage(Copy(a, 2));
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.249 Beiträge
 
Delphi 12 Athens
 
#3

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 19:01
Zitat:
var S: string := Copy(Value, 1);
Falls es hier kein {$ZeroStrings ON} ist (also ab zweitem Zeichen, nicht ab dem Ersten, Welches 0 wäre),
dann entspricht es eigentlich einem UniqueString.
var S: string := UniqueString(Value);
(falls doch, dann MaxInt ... siehe jaenicke)

k.A. warum man das dann nicht direkt verwendet hat
und wozu das hier überhaupt gemacht wird.



Bei dynamischen Arrays kann man hier auch den zweiten Parameter weglassen, um das "Gleiche" zu erreichen ... k.A. warum hier die Version für Strings nicht "identisch" reagiert.
A := Copy(B);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Jul 2022 um 19:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.084 Beiträge
 
Delphi 12 Athens
 
#4

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 21:39
dann entspricht es eigentlich einem UniqueString.
var S: string := UniqueString(Value);
Ähem, UniqueString ist eine procedure und keine function .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.249 Beiträge
 
Delphi 12 Athens
 
#5

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 22:00
ups

Delphi-Quellcode:
var S: string := Value;
UniqueString(S);

oder

Delphi-Quellcode:
procedure TField.SetEditText({const} Value: string);
begin
  if Assigned(FOnSetText) then
  begin
    UniqueString(Value);
    FOnSetText(Self, Value);
  end
  else
    SetText(Value);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.084 Beiträge
 
Delphi 12 Athens
 
#6

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 18. Jul 2022, 23:26
Da sowohl SetEditText als auch FOnSetText einen const string erwarten, erschließt sich mir der Sinn dieses Kopierens noch nicht. Das wäre vielleicht einen Kommentar wert gewesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#7

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 19. Jul 2022, 09:46
Da sowohl SetEditText als auch FOnSetText einen const string erwarten, erschließt sich mir der Sinn dieses Kopierens noch nicht. Das wäre vielleicht einen Kommentar wert gewesen.
Ich denke auch wenn man eine String kopie braucht kann man die doch innerhalb des ereignisses erstellen.

Vielleicht ist der Code Hilfscode zum Debuggen, den man vergessen hat zu entfernen.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?

  Alt 5. Sep 2022, 13:25
Bei dynamischen Arrays kann man hier auch den zweiten Parameter weglassen, um das "Gleiche" zu erreichen ... k.A. warum hier die Version für Strings nicht "identisch" reagiert.
A := Copy(B);
Joa, oder halt einfach A.SubString(0) anstelle von Copy(A, 1) verwenden. Damit hast du eh immer einen Zero-Offset.
Aber noch einfacher wäre es natürlich mit String.Copy(A): Kein Rumgefussle mehr mit UniquString und irgendwelchen temporären Variablen...
Dennis
  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 21:11 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