Strings in Delphi zerteilen

Strings ohne Trenner an bestimmter Position teilen

Hier wird ein Datum in englischer Schreibweise in die deutsche Schreibweise umgewandelt.
Diese Art des zerteilens eines Strings kann man benutzen wenn der Originalstring immer den selben Aufbau hat.

Englisches Datum: 20161123
Deutsches Datum: 23.11.2016

procedure TForm1.Button1Click(Sender: TObject);
var
  enDat, deDat, tag, monat, jahr: string;
begin
  enDat := '20161123';

  jahr  := Copy(enDat, 1, 4);
  monat := Copy(enDat, 5, 2);
  tag   := Copy(enDat, 7, 2);

  deDat := tag+'.'+monat+'.'+jahr;

  label1.Caption := deDat;
end;

 

Einzelne mit Trennzeichen geteilte Wörter aus einem String extrahieren

Um einen String zu zerlegen bei dem verschiedene Wörter durch ein bestimmtes Trennzeichen voneinander abgetrennt sind kann man folgenden Code verwenden. Hier muss man allerdings beachten dass neben dem angegebenen Delimiter auch Leerzeichen als Delimiter hergenommen werden. Dieser Code ist also praktisch bei Listen bei denen einzelne Wörter durch ein Ttrennzeichen voneinander abgetrennt werden.

Teststring: Hallo|Wie;Gehts;Dir;Heute?
Delimiter: ;

Hier wird das Wort „Gehts“ als Ergebnis ausgegeben.

function explodeString(text: string; delimiter: char; p: integer): string;
var
  stl: TStrings;
begin
  stl := TStringList.Create;
  try
    stl.delimiter := delimiter;
    stl.DelimitedText := text;
  finally
    result := stl.Strings[p];
    stl.free;
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(explodeString('Hallo|Wie;Gehts;Dir;Heute?', ';', 1));
end;

 

Explode Funktion für Delphi

Mit dieser , der explode Funktion von php nachempfundenen Funktion, kann man einen Text anhand eines Trenners teilen und einen bestimmten Wert ausgeben. Hier spielt es keine Rolle ob auch Leerzeichen im Text vorhanden sind da diese nicht als Delimiter wie in der vorherigen Version besprochen, hergenommen werden.

Dieser Code stammt nicht von mir sondern von Delphi-Praxis.

type TSTringdynarray = array of String;



function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      if aLen=0 then aLen := 10 else

      aLen := aLen * 2;
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  ar: TSTringdynarray;
begin
  ar := explode('|', '   Hallo Max|Wie|gehts Dir denn?');
  showmessage(ar[0]);
end;

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.