![]() |
Stringreplace - Klassenbezeichnungen filtern
Hey!
Und zwar: Ich habe einen String, welcher vom bestimmten Eintrag betroffene Klassen beinhalten. Zum Beispiel sind dies: R9a=R9b=R9c=R9d= Nun möchte ich, dass über Stringreplace folgendes Ergebnis rauskommt: R9abcd Sollte es sich bspw. um R8a=R8b=R9a=R9b=R9c= handeln, soll dann R8abR9abc rauskommen. Wie ist die zu bewerkstelligen? Bisher habe ich es leider nur geschafft, das = zu ersetzen:
Delphi-Quellcode:
klasse:=StringReplace(klasse,'=','',[rfReplaceAll, rfIgnoreCase]);
|
Re: Stringreplace - Klassenbezeichnungen filtern
ganz angesehen vom sinn und zweck dieser vorgehensweise ist es mit einem stringreplace nicht getan.
man könnte den string parsen: man beachte immer die aktuelle nummer (beispiel 8 oder 9 in deinem fall). man schaut sich alle weiteren zeichen an: das R und die 8 löscht man raus, das = auch. dann hat man für den string R8a=R8b=R9a=R9b=R9c= schon einmal R8ab nun kommt die 9 und für die sowie für alle folgenden Zeichen gilt das selbe Spielchen. du kannst hier mit Delete() oder Copy arbeiten oder nimmst dir nen zweiten string an den du das aktuelle Zeichen jeweils anhängst. |
Re: Stringreplace - Klassenbezeichnungen filtern
Zitat:
Zitat:
|
Re: Stringreplace - Klassenbezeichnungen filtern
du kannst auf jeden fall mit ner schleife arbeiten:
Delphi-Quellcode:
procedure WieDieAuchImmerHeissenMag();
var einZeichen: Char; i: Integer; begin for i:=1 to length(deinString) do begin einZeichen := deinString[i]; if einZeichen = 'R' then ... else if ... ... end; end; |
Re: Stringreplace - Klassenbezeichnungen filtern
Hallo Sven,
wenn die Elemente immer durch das Zeichen '=' getrennt werden, und für den Test auf Gleichheit alle Zeichen bis auf das letzte herangezogen werden, dann könnte der folgende Code funktionieren:
Delphi-Quellcode:
Gruß Hawkeye
function Compress (const s: string): string;
var Item, OldPrefix, NewPrefix: string; Index: Integer; begin with TStringList.Create do try Delimiter := '='; DelimitedText := s; OldPrefix := ''; Result := ''; for Index := 0 to Count - 1 do begin Item := Strings[Index]; NewPrefix := Copy(Item, 1, Length(Item) - 1); if SameText(OldPrefix, NewPrefix) then Result := Result + Copy(Item, Length(Item), 1) else begin Result := Result + Item; OldPrefix := NewPrefix; end; end; finally Free; end; end; procedure Test; begin ShowMessage (Compress('R8a=R8b=R9a=R9b=R9c=')); end; |
Re: Stringreplace - Klassenbezeichnungen filtern
Hey! Damit hab ich jetz ehrlich gesagt nicht gerechnet!
Echt mega vielen Dank! Funktioniert prima! :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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