AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein vor dem ersten Delimiter alles löschen
Thema durchsuchen
Ansicht
Themen-Optionen

vor dem ersten Delimiter alles löschen

Ein Thema von lucy · begonnen am 27. Dez 2024 · letzter Beitrag vom 27. Dez 2024
Antwort Antwort
lucy

Registriert seit: 25. Okt 2017
83 Beiträge
 
Delphi XE7 Starter
 
#1

vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 15:35
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/
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.137 Beiträge
 
Delphi 12 Athens
 
#2

AW: vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 15:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.642 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 15:46
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.
Thomas Mueller
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
83 Beiträge
 
Delphi XE7 Starter
 
#4

AW: vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 16:20
vielen dank läuft super
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.525 Beiträge
 
Delphi 12 Athens
 
#5

AW: vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 16:52
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.642 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: vor dem ersten Delimiter alles löschen

  Alt 27. Dez 2024, 17:40
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.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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 by Thomas Breitkreuz