Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringreplace - Klassenbezeichnungen filtern (https://www.delphipraxis.net/96851-stringreplace-klassenbezeichnungen-filtern.html)

Svenkan 31. Jul 2007 22:04


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]);

semo 31. Jul 2007 22:34

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.

Svenkan 31. Jul 2007 22:38

Re: Stringreplace - Klassenbezeichnungen filtern
 
Zitat:

Zitat von computer-glossar.de
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.

Danke schonmal, ich werde mir das morgen mal durchgehen.

Zitat:

Zitat von computer-glossar.de
ganz angesehen vom sinn und zweck dieser vorgehensweise

Die Dateien sind so in der Datenbank gespeichert und damit die Schüler die Pläne dann auch ordentlich lösen können, sollen die Klassen so gruppiert werden. ;)

semo 31. Jul 2007 22:42

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;

Hawkeye219 31. Jul 2007 23:03

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:
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;
Gruß Hawkeye

Svenkan 1. Aug 2007 11:38

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