![]() |
Re: Letzte Stelle eines Strings anwählen
Zitat:
|
Re: Letzte Stelle eines Strings anwählen
Ok, falsche Stelle im Kopf gehabt: Bei einem leerem String gibt
![]() Wäre es so wie ich es zuvor beschrieben habe, dann müsste meine XMLLib nur noch abrauchen... |
Re: Letzte Stelle eines Strings anwählen
Wow, da habe ich wohl eine rege Diskussion aufleben lassen.
Naja, bei meiner Syntaxprüfung klappt jetzt alles wunderbar bis auf die Überprüfung des vorletzten Zeichens des Strings. Wie kann ich das wieder anwählen? Wenn ich
Delphi-Quellcode:
schreibe, kriege ich eine Fehlermeldung wegen eines Operandentyps. Ich hoffe, ihr habt erneut eine Antwort für mich. :-D
Memo1.Text[Length(Memo1.Text)-1];
|
Re: Letzte Stelle eines Strings anwählen
Delphi-Quellcode:
s := Memo1.Text[Length(Memo1.Text)-2];
|
Re: Letzte Stelle eines Strings anwählen
Hm, damit habe ich mein Problem noch nicht gelöst. Also es geht um eine Syntaxprüfung, wobei der eingegebene Text immer diese Form haben muss: ab <Mein Text> b. Und deswegen wollte ich eben die Bedingung schreiben, dass wenn das vorletzte Zeichen des Strings nicht die Ordnungszahl 32 (ASCII-Tabelle: Leerzeichen) hat, eine Fehlermeldung kommt.
Ich habe es auch schon mit
Delphi-Quellcode:
(also dass die letzten beiden Zeichen eine Lücke und ein b sind) probiert, aber dann kennt er den Bezeichner rightstr nicht...
if not (rightstr(Memo1.Text, 2) = ' b') then
|
Re: Letzte Stelle eines Strings anwählen
Moin Informatik-LK,
RightStr befindet sich in der Unit StrUtils (zumindest in D7). Die müsstest Du noch unter Uses einbinden. Was mir aber aufgefallen ist: Du verwendest mehrfach die Eigenschaft Text von TMemo. Zugriffe auf diese Eigenschaft sollte man möglichst vermeiden, da sie bei jedem Aufruf erst einmal aus den Lines zusammengesetzt wird. Das drückt, je nach Anzahl der Zeilen im Memo, ganz gewaltig auf die Performance. In Deinem Anwendungsfall scheint es so, als würdest Du immer mit der letzten Zeile des Memos auskommen, also wäre doch die Abfrage
Delphi-Quellcode:
eine Alternative.
if RightStr(Memo1.Lines[Memo1.Lines.Count-1],2) = ' b' then
Voraussetzung ist hier natürlich, dass mindestens eine Zeile enthalten ist, da es sonst zu einer AV kommt. |
Re: Letzte Stelle eines Strings anwählen
Moin Christian,
Zitat:
Freundliche Grüße |
Re: Letzte Stelle eines Strings anwählen
Ich muss euch beide enttäuschen:
1. Es gibt keinen Unterschied 2. Er baut in keinem der beiden Fällen die Strings zusammen.
Delphi-Quellcode:
Bei einem Memo wird der Text direkt vom Control gehalten und die Lines[] Eigenschaft holt die Zeilen mit den Windowsbotschaften direkt vom Control.
function TMemoStrings.GetTextStr: string;
begin Result := Memo.Text; end;
Delphi-Quellcode:
Der angegebene Quelltext ist (c) Copyright by Borland/CodeGear.
function TMemoStrings.Get(Index: Integer): string;
var Text: array[0..4095] of Char; begin Word((@Text)^) := SizeOf(Text); SetString(Result, Text, SendMessage(Memo.Handle, EM_GETLINE, Index, Longint(@Text))); end; Bei einer ListBox würdet ihr teilweise Recht haben. Teilweise nur, weil die ListBox ihre Text Eigenschaft nicht veröffentlicht. |
Re: Letzte Stelle eines Strings anwählen
Zitat:
mein Delphi sagt mit bei der TMemo.Lines.Text als Getter:
Delphi-Quellcode:
function TStrings.GetTextStr: string;
var I, L, Size, Count: Integer; P: PChar; S, LB: string; begin Count := GetCount; Size := 0; LB := LineBreak; for I := 0 to Count - 1 do Inc(Size, Length(Get(I)) + Length(LB)); SetString(Result, nil, Size); P := Pointer(Result); for I := 0 to Count - 1 do begin S := Get(I); L := Length(S); if L <> 0 then begin System.Move(Pointer(S)^, P^, L); Inc(P, L); end; L := Length(LB); if L <> 0 then begin System.Move(Pointer(LB)^, P^, L); Inc(P, L); end; end; end; |
Re: Letzte Stelle eines Strings anwählen
Hi Stephan,
Thomas hat Recht. Ich bin auch davon ausgegangen, dass es sich bei der Eigenschaft Lines um eine einfache StringList handelt, aber weit gefehlt: Es wird TMemoStrings verwendet und in dieser Klasse wird der Text tatsächlich per WM_GETTEXT besorgt. Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz