Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeichen in String an Position x ersetzten (https://www.delphipraxis.net/15311-zeichen-string-position-x-ersetzten.html)

TPeterT 19. Sep 2005 07:51

Re: Zeichen in String an Position x ersetzten
 
Hallo!
Schon gefunden...
#0 um das Zeichen zu löschen..
trotzdem danke und liebe Grüsse
Peter

marabu 19. Sep 2005 07:57

Re: Zeichen in String an Position x ersetzten
 
Hi Peter,

ich hätte es mit Delete(DeinString, DiePosition, 1) versucht. Kannst du mal erklären, wie du auf deine Lösung gekommen bist?

marabu

TPeterT 19. Sep 2005 08:02

Re: Zeichen in String an Position x ersetzten
 
Hallo!
Ich habe es folgend gemacht:
Löscht alle Zeichen, welche markiert sind ...
Delphi-Quellcode:
     If (Sender as TcxDBTextEdit).SelLength > 0 then
      begin
       A := (Sender as TcxDBTextEdit).SelStart + 1;
       B := A + (Sender as TcxDBTextEdit).SelLength - 1;
       While A < B do
        begin
         Text[A] := #0;
         A := A + 1;
        end;
      end;

Liebe Grüsse
Peter

[edit=Sharky]Und noch einmal die Delphi-Tags gesetzt. Mfg, Sharky[/edit]

marabu 19. Sep 2005 08:08

Re: Zeichen in String an Position x ersetzten
 
Hi Peter,

ich habe gerade meinen Beißring verlegt - machen wir es deshalb kurz:

#0 ist selbst ein Zeichen. Bei short strings darf es im string vorkommen, bei long strings ist es das terminierende Zeichen. In deinem Fall würde ich dir folgendes vorschlagen:

Delphi-Quellcode:
with Sender as TcxDBTextEdit do
  SelText := '';
Freundliche Grüße vom marabu

Luckie 19. Sep 2005 08:13

Re: Zeichen in String an Position x ersetzten
 
Zitat:

Zitat von marabu
#0 ist selbst ein Zeichen. Bei short strings darf es im string vorkommen, bei long strings ist es das terminierende Zeichen.

:gruebel:
Shortstrings haben eine feste Länge, da darf #0 vorkommen, obwohl es das Stringendezeichen ist.
Bei AnsiStrings darf #0 auch vorkommen, deren Länge wird vor dem String im Speicher abgelegt.
Bei null terminierenden Strings (PChar) beendet das #0 Zeichen den String.

@marabu: Wenn du mit long strings AnsiStrings meinst, ist deine Aussage falsch. Wenn du damit aber null terminierende Strings meist, stimmt die Aussage wieder.

TPeterT 19. Sep 2005 08:15

Re: Zeichen in String an Position x ersetzten
 
Hi du!
da hatte ich nochmals Glück wegen deines beißringes ;-)

Danke für den Tipp! Werde es gleich korrigieren!

Liebe Grüsse
Peter

marabu 19. Sep 2005 08:34

Re: Zeichen in String an Position x ersetzten
 
Luckie,

mit long string meine ich wirklich AnsiString. Beim längen-gezählten AnsiString wird zwar das #0 Zeichen anstandslos mitgezählt, kopiert, etc., aber sobald eine der vielen internen automatischen Wandlungen nach PChar statt findet - AUTSCH. Schau mal hier:

Delphi-Quellcode:
var
  s: AnsiString;
begin
  s := 'Bisweilen geh ich im Walde so für mich hin, nach schmackhaften Pilzen steht mir der Sinn';
  s[43] := #0;
  ShowMessage(Format('Der String "%s" hat die Länge %d', [s, Length(s)]));
end;
Deswegen sollte man solange keine null chars in einer string Variablen mitführen, bis man genau weiß was man da tut.

Freundliche Grüße vom marabu

Luckie 19. Sep 2005 08:39

Re: Zeichen in String an Position x ersetzten
 
Zitat:

Zitat von marabu
mit long string meine ich wirklich AnsiString. Beim längen-gezählten AnsiString wird zwar das #0 Zeichen anstandslos mitgezählt, kopiert, etc., aber sobald eine der vielen internen automatischen Wandlungen nach PChar statt findet - AUTSCH.

Jupp.

Manchaml ist es ganz schön schwer eine vermeindlich einfache Frage richtig und umfassend zu beantworten. :-?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr.
Seite 2 von 2     12   

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