AGB  ·  Datenschutz  ·  Impressum  







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

Wie gibt man einen Substring aus?

Ein Thema von kagi3624 · begonnen am 9. Mär 2020 · letzter Beitrag vom 10. Mär 2020
Antwort Antwort
Seite 2 von 3     12 3      
Dennis07

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

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 12:09
Allerdings fangen Strings beim String-Helper immer bei 0 an!
Das gilt nicht nur für Substring , sondern auch für TStringHelper.IndexOf oder TStringHelper.Insert .
Dennis
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#12

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 13:42
Allerdings fangen Strings beim String-Helper immer bei 0 an!
Das gilt nicht nur für Substring , sondern auch für TStringHelper.IndexOf oder TStringHelper.Insert .
TStringHelper.Chars[0] Ich finde das sehr gut, endlich klare, eindeutige Verhältnisse
Benutze ich nur noch bei neuen Units.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 14:11
UniCode String fangen bei 0 an.
AnsiStrings bei 1 in der 0. Position ist die Länge des Strings gespeichert.
Falsch, beide fangen bei 1 an - außer, es ist die Direktive $ZEROBASEDSTRINGS gesetzt.
Allerdings arbeiten alle Methoden von System.SysUtils.TStringHelper mit 0-basierten Indizes.
Jupp, die String-Helper immer ab 0
und für die normalen Strings muß (String/UnicodeString/AnsiString) muß man aufpassen für welches System kompiliert wird.
In den NextGenCompilern (iOS/Android) ist $ZEROBASEDSTRINGS standardmäßig aktiv. (kann aber in eigenen Units notfalls deaktiviert werden, aber NIEMALs komplett aus, da sonst die RTL abraucht, weil die Entwickler da blind von ausgehen es ist aus)
Über den Typ bekommt ihr via Low(string) den aktuellen Startpunkt,
bzw. Low(StringVariable) und High(StringVariable) anstatt 1..Length(StringVariable)
oder mit for C in S do über die Chars eines Strings enumerieren.

Und im Nextgen fehlen auch der ShortString und AnsiString/UTF8String/... (die gibt es, für da wo die Entwickler zu faul waren es zu ändern, aber der Typ ist nicht öffentlich) und man muß dort überall z.B. mit ByteArrays und TEncoding arbeiten. (oder sich den Typ fast hackermäßig rausholen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Mär 2020 um 14:14 Uhr)
  Mit Zitat antworten Zitat
Dennis07

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

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 19:16
TStringHelper.Chars[0] Ich finde das sehr gut, endlich klare, eindeutige Verhältnisse
Benutze ich nur noch bei neuen Units.
Bringt dir nur nicht viel, wenn Chars[] readonly ist...
Dennis
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#15

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 19:30
Jetzt explodiert die Diskussion hier mal wieder und hat absolut nichts mehr mit der ursprünglichen Frage zu tun
Wie gibt man einen Substring aus?.

Der TE möchte genau das wissen. Detailwissen interessiert hier vermutlich niemanden, der auf diese Frage eine Antwort sucht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 19:33
Selbst bauen?

Falls man ReportHelper ableiten könnte, was aber nur bei den ClassHelpern geht.
Delphi-Quellcode:
type
  TMyStringHelper = record helper(TStringHelper) for string
  private
    procedure SetChars(Index: Integer; Value: Char);
  public
    property Chars[Index: Integer] write SetChars;
  end;

function TMyStringHelper.SetChars(Index: Integer; Value: Char);
begin
  Self[Index + Low(string)] := Value;
end;
So geht es, aber dir fehlen dann alle Standard-HelperFunktionen.
Delphi-Quellcode:
type
  TMyStringHelper = record helper for string
  private
    function GetChars(Index: Integer): Char;
    procedure SetChars(Index: Integer; Value: Char);
  public
    property Chars[Index: Integer]: Char read GetChars write SetChars;
  end;

function TMyStringHelper.GetChars(Index: Integer): Char;
begin
  Result := Self[Index + Low(string)];
end;

procedure TMyStringHelper.SetChars(Index: Integer; Value: Char);
begin
  Self[Index + Low(string)] := Value;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Mär 2020 um 19:41 Uhr)
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
129 Beiträge
 
Delphi 12 Athens
 
#17

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 20:04
@kagi3624

wie wäre es mit dem Klassiker:
Delphi-Quellcode:
procedure TForm1.Test;
var
  e, s: string;
begin
  s:='123456';
  e:=LeftStr(s,2);
  Memo1.Lines.Add(e);
end;
Die Function LeftStr() ist Bestandteil der Unit StrUtils (D6, D7).
Im Aktuellem Delphi: System.StrUtils
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#18

AW: Wie gibt man einen Substring aus?

  Alt 9. Mär 2020, 23:38
Tja, dem OP wird wohl echt nur der Klassiker bleiben, wenn er D6 benutzt.
Denn Stringhelper usw. gab's da noch nicht...
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#19

AW: Wie gibt man einen Substring aus?

  Alt 10. Mär 2020, 09:22
@kagi3624

wie wäre es mit dem Klassiker:
Delphi-Quellcode:
procedure TForm1.Test;
var
  e, s: string;
begin
  s:='123456';
  e:=LeftStr(s,2);
  Memo1.Lines.Add(e);
end;
Die Function LeftStr() ist Bestandteil der Unit StrUtils (D6, D7).
Im Aktuellem Delphi: System.StrUtils
Danke, das sieht schon mal besser aus, als was ich hatte
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#20

AW: Wie gibt man einen Substring aus?

  Alt 10. Mär 2020, 10:06
Selbst bauen?

Falls man ReportHelper ableiten könnte, was aber nur bei den ClassHelpern geht.
Delphi-Quellcode:
type
  TMyStringHelper = record helper(TStringHelper) for string
  private
    procedure SetChars(Index: Integer; Value: Char);
  public
    property Chars[Index: Integer] write SetChars;
  end;

function TMyStringHelper.SetChars(Index: Integer; Value: Char);
begin
  Self[Index + Low(string)] := Value;
end;
So geht es, aber dir fehlen dann alle Standard-HelperFunktionen.
Delphi-Quellcode:
type
  TMyStringHelper = record helper for string
  private
    function GetChars(Index: Integer): Char;
    procedure SetChars(Index: Integer; Value: Char);
  public
    property Chars[Index: Integer]: Char read GetChars write SetChars;
  end;

function TMyStringHelper.GetChars(Index: Integer): Char;
begin
  Result := Self[Index + Low(string)];
end;

procedure TMyStringHelper.SetChars(Index: Integer; Value: Char);
begin
  Self[Index + Low(string)] := Value;
end;
Ja richtig, und ich habe doch so einen tollen Tip von Uwe gelesen, den wollte ich immer mal ausprobieren.

Vermutlich funktioniert das Vererben aber nicht bei String , aber einen Versuch wäre es Wert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:31 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