![]() |
vor dem ersten Delimiter alles löschen
hallo,
ich habe einen string mit einem "delimiter := '/'" zum beispiel : heute ist ein schöner tag 123 / das wetter ist toll / gewitter / regen / sonne 435/ jetzt möchte ich gerne alles vor dem ersten delimiter löschen. das ergebnis : das wetter ist toll / gewitter / regen / sonne 435/ |
AW: vor dem ersten Delimiter alles löschen
Delphi-Quellcode:
program RemoveBeforeFirstDelimiter;
uses SysUtils; var InputString: string; Delimiter: Char; Position: Integer; begin // Ursprünglicher String InputString := 'heute ist ein schöner tag 123 / das wetter ist toll / gewitter / regen / sonne 435/'; Delimiter := '/'; // Position des ersten Delimiters suchen Position := Pos(Delimiter, InputString); if Position > 0 then // Alles nach dem ersten Delimiter behalten (einschließlich des Delimiters selbst) InputString := Trim(Copy(InputString, Position + 1, Length(InputString))); // Ausgabe des Ergebnisses Writeln(InputString); end. |
AW: vor dem ersten Delimiter alles löschen
ChatGPT sagt dazu:
Delphi-Quellcode:
Und zumindest auf den ersten Blick passt das auch, zumindest wenn Delimiter ein Char ist und kein String mit mehreren Zeichen. Wichtig: Ob das Trim korrekt ist, hängt davon ab, ob Du Leerzeichen am Anfang/Ende beibehalten willst oder nicht. Das geht aus Deiner Aufgabenstellung nicht hervor.
function RemoveTextBeforeFirstDelimiter(const Input: string; const Delimiter: Char): string;
var DelimiterPos: Integer; begin // Suche die Position des ersten Delimiters DelimiterPos := Pos(Delimiter, Input); // Wenn der Delimiter gefunden wird, schneide alles davor ab if DelimiterPos > 0 then Result := Trim(Copy(Input, DelimiterPos + 1, Length(Input) - DelimiterPos)) else // Wenn kein Delimiter gefunden wird, gib den ursprünglichen String zurück Result := Input; end; |
AW: vor dem ersten Delimiter alles löschen
vielen dank :-) läuft super
|
AW: vor dem ersten Delimiter alles löschen
Mit dem auch in XE7 vorhandenen String-Helper geht das auch als Einzeiler:
Delphi-Quellcode:
Das funktioniert übrigens auch, wenn der Delimiter gar nicht vorkommt. Dann liefert das IndexOf ein -1 zurück, was mit dem Succ auf 0 erhöht wird und Substring somit den Ausgangsstring zurück liefert. (ChatGPT scheint das übersehen zu haben)
var
S, T: string; begin S := 'heute ist ein schöner tag 123 / das wetter ist toll / gewitter / regen / sonne 435/'; T := S.Substring(Succ(S.IndexOf('/'))).TrimLeft; Assert(T = 'das wetter ist toll / gewitter / regen / sonne 435/'); end; Für das TrimLeft gilt das bereits von Thomas gesagte. |
AW: vor dem ersten Delimiter alles löschen
Pos liefert 0, wenn der String nicht gefunden wird, aber auch das würde funktionieren, da Copy wiederum 1-basiert ist. Trotzdem bevorzuge ich persönlich die explizite Zuweisung das Inputs auf Result, da dann klarer ist, was in diesem Fall passiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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