AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Object-Pascal / Delphi-Language Delphi Ein dynamisches Array aus einem String erzeugen

Ein dynamisches Array aus einem String erzeugen

Ein Thema von jbg · begonnen am 14. Mär 2003
Antwort Antwort
jbg

Registriert seit: 12. Jun 2002
3.477 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Ein dynamisches Array aus einem String erzeugen

  Alt 14. Mär 2003, 17:55
Eine Zeichenkette soll in ein dynamisches String-Array aufgeteilt werden. Unter PHP gibt es dazu die Funktion explode(). Delphi bietet jedoch von Haus aus keine solche an.

Delphi-Quellcode:
// Explode trennt S in die durch Separator getrennten Elemente auf. Wenn Limit
// > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element
// die Restzeichenkette steht.

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
      Inc(ALen, 5);
      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;


// Implode fügt alle Elemente von Pieses in einen String aneinander, wobei die
// Elemente durch Glue getrennt werden.
function Implode(const Glue: string; const Pieces: array of string): string;
var
  i, Len: Integer;
  P: PChar;
  GlueLen: Integer;
begin
  GlueLen := Length(Glue);
  Len := GlueLen * High(Pieces);
  for i := 0 to High(Pieces) do Inc(Len, Length(Pieces[i]));
  SetLength(Result, Len);
  if Len > 0 then
  begin
    P := @Result[1];
    for i := 0 to High(Pieces) do
    begin
      if (GlueLen > 0) and (i > 0) then P := StrLCopy(P, Pointer(Glue), GlueLen) + GlueLen;
      Len := Length(Pieces[i]);
      if Len > 0 then P := StrLCopy(P, Pointer(Pieces[i]), Len) + Len;
    end;
  end;
end;
Toxman fügte noch hinzu, dass TStringdynarray als type deklariert werden muss:

type TSTringdynarray = array of String; Eine optimierte Version vom alzaimar gibt es in der Open-Source-Rubrik.

[edit=Matze]Link zur optimierten Version hinzugefügt. Mfg, Matze[/edit]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf