Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   vor dem ersten Delimiter alles löschen (https://www.delphipraxis.net/216428-vor-dem-ersten-delimiter-alles-loeschen.html)

lucy 27. Dez 2024 14:35

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/

Rollo62 27. Dez 2024 14:45

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.

dummzeuch 27. Dez 2024 14:46

AW: vor dem ersten Delimiter alles löschen
 
ChatGPT sagt dazu:

Delphi-Quellcode:
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;
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.

lucy 27. Dez 2024 15:20

AW: vor dem ersten Delimiter alles löschen
 
vielen dank :-) läuft super

Uwe Raabe 27. Dez 2024 15:52

AW: vor dem ersten Delimiter alles löschen
 
Mit dem auch in XE7 vorhandenen String-Helper geht das auch als Einzeiler:
Delphi-Quellcode:
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;
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)

Für das TrimLeft gilt das bereits von Thomas gesagte.

dummzeuch 27. Dez 2024 16:40

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