Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie gibt man einen Substring aus? (https://www.delphipraxis.net/203657-wie-gibt-man-einen-substring-aus.html)

Dennis07 9. Mär 2020 11:09

AW: Wie gibt man einen Substring aus?
 
Allerdings fangen Strings beim String-Helper immer bei 0 an!
Das gilt nicht nur für
Delphi-Quellcode:
Substring
, sondern auch für
Delphi-Quellcode:
TStringHelper.IndexOf
oder
Delphi-Quellcode:
TStringHelper.Insert
.

Rollo62 9. Mär 2020 12:42

AW: Wie gibt man einen Substring aus?
 
Zitat:

Zitat von Dennis07 (Beitrag 1459237)
Allerdings fangen Strings beim String-Helper immer bei 0 an!
Das gilt nicht nur für
Delphi-Quellcode:
Substring
, sondern auch für
Delphi-Quellcode:
TStringHelper.IndexOf
oder
Delphi-Quellcode:
TStringHelper.Insert
.

Delphi-Quellcode:
TStringHelper.Chars[0]
Ich finde das sehr gut, endlich klare, eindeutige Verhältnisse :thumb:
Benutze ich nur noch bei neuen Units.

himitsu 9. Mär 2020 13:11

AW: Wie gibt man einen Substring aus?
 
Zitat:

Zitat von Stevie (Beitrag 1459235)
Zitat:

Zitat von Klaus01 (Beitrag 1459226)
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
Delphi-Quellcode:
Low(string)
den aktuellen Startpunkt,
bzw.
Delphi-Quellcode:
Low(StringVariable)
und
Delphi-Quellcode:
High(StringVariable)
anstatt
Delphi-Quellcode:
1..Length(StringVariable)

oder mit
Delphi-Quellcode:
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)

Dennis07 9. Mär 2020 18:16

AW: Wie gibt man einen Substring aus?
 
Zitat:

Zitat von Rollo62 (Beitrag 1459247)
Delphi-Quellcode:
TStringHelper.Chars[0]
Ich finde das sehr gut, endlich klare, eindeutige Verhältnisse :thumb:
Benutze ich nur noch bei neuen Units.

Bringt dir nur nicht viel, wenn
Delphi-Quellcode:
Chars[]
readonly ist...

DieDolly 9. Mär 2020 18:30

AW: Wie gibt man einen Substring aus?
 
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.

himitsu 9. Mär 2020 18:33

AW: Wie gibt man einen Substring aus?
 
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. :freak:
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;

ghubi01 9. Mär 2020 19:04

AW: Wie gibt man einen Substring aus?
 
@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

TurboMagic 9. Mär 2020 22:38

AW: Wie gibt man einen Substring aus?
 
Tja, dem OP wird wohl echt nur der Klassiker bleiben, wenn er D6 benutzt.
Denn Stringhelper usw. gab's da noch nicht...

kagi3624 10. Mär 2020 08:22

AW: Wie gibt man einen Substring aus?
 
Zitat:

Zitat von ghubi01 (Beitrag 1459306)
@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 :thumb:

Rollo62 10. Mär 2020 09:06

AW: Wie gibt man einen Substring aus?
 
Zitat:

Zitat von himitsu (Beitrag 1459304)
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. :freak:
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 :cry:, aber einen Versuch wäre es Wert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 2 von 3     12 3      

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