Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String richtig zerstückeln (https://www.delphipraxis.net/37919-string-richtig-zerstueckeln.html)

valon 12. Jan 2005 10:23


String richtig zerstückeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute ! Ich habe da ein Problem , vielleicht könnt ihr mir ja helfen.

Ich habe da ein String der Form [A data1 B data2 C data3 ] z.B [AaaBbbCcc]
Jetzt zerstückel Ich den String , und schreibe das was zwischen A und B steht in die Variable AData , zwischen B und C in BData,
und zwischen C und ] in CData.
D.h

AData = aa
BData = bb
CData = cc

Ich habe dafür eine Funktion geschrieben die nur bedingt funktioniert.

Delphi-Quellcode:
private
  AData: String;
  BData: String;
  CData: String;

    { Private-Deklarationen }
  public

  procedure extractstring(newString: String);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.extractstring(newString: String);
var
  aDataString: String;
  i: Integer;
  aFoundChar: Char;

begin
  i := 2 ;
  aDataString := '';
  aFoundChar := Char(0);

  while i< Length(newString)+1 do
    begin
      if newString[i] in ['A','B','C',']'] then
        begin
          // Prüfen, ob schon mal ein Character gefunden wurde
          if aFoundChar<>Char(0) then
            begin
              case aFoundChar of
                'A' : Self.AData := aDataString;
                'B' : Self.BData := aDataString;
                'C' : Self.CData := aDataString;
              end;
          end;
          aFoundChar := newString[i];
          aDataString := '';
        end
      else
        begin
          aDataString := aDataString + newString[i];
        end;

      Inc(i);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
newstring : String;
begin
newstring:= '[AaaBbbCcc]';     // das ist der zu zerstückelnde String
Self.extractstring(newstring);

Self.Edit1.Text := Self.AData;
Self.Edit2.Text := Self.BData;
Self.Edit3.Text := Self.CData;

end;
Das Problem bei der Funktion extractstring() ist das wenn beim String '[AaaBbbCcc]' zwischen A und B anstatt aa , aC zum Beispiel steht, geht er in die If-Schleife
Delphi-Quellcode:
if newString[i] in ['A','B','C',']'] then..
wenn er bei dem Buchstaben C kommt. Das soll er aber nicht weil dieses C nicht das C von 'C data3' ist. Es gehört als Datum in AData.

Wie könnt ich da Problem lösen , damit zb. ein String [AaCBbbCcc] richtig zerstückelt wird.
d.h
AData=aC
BData=bb
CData=cc

Ich hab dass Programm mal angehängt , vielleicht könnt ihr ja mal reinschauen.

Danke für eure Hilfe

dizzy 12. Jan 2005 11:39

Re: String richtig zerstückeln
 
Wenn es immer A, B, C, ... der Reihe nach ist, könntest du zumindest Sprünge von A nach C ohne B überprüfen in dem du mitzählst welches der letzte Marker war. Sollte in Abschnitt A allerdings ein "aB" vorkommen, dann hast du verloren. Dann ist der String eigentlich nicht mehr brauchbar, da nicht mehr eindeutig.

Gruss,
Fabian

yvesdaeschle 12. Jan 2005 11:46

Re: String richtig zerstückeln
 
Das ist ja voll Sinnlos... in jedem Wort könnte ein A, B oder C sein dann splittet er anders. Du must dir was überlegen was nicht nur mit Buchstaben zu tun hat |A| oder so!!

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz