Autor Beitrag
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 17:33 
Zuerst möchte ich sagen, dass ich das nicht selbst geschrieben habe, sondern jbg in diesem Thread.

Die funktion dient dazu einen String der durch ein bestimmtes Zeichen bzw durch eine bestimtme Zeichenkette unterteilt ist in ein Array zu schreiben. Unter PHP gibt es diese funktion von Haus aus, und sie nennt sich explode.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
{-----------------------------------------------------------------------------
  Procedure : Explode
  Purpose   : Seperates a CSV-line
  Arguments : const Separator, S: string; Limit: Integer = 0
  Result    : TStringDynArray
-----------------------------------------------------------------------------}

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 < 0then 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 := StrPos(P, PChar(Separator));
    if (P = nilor ((Limit > 0and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
      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); // wirkliche Länge festlegen
end;


Aufrufen könnt ihr die Funktion z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  s: string;
  exparr: TStringDynArray;
  x: integer;

begin
  s := 'ErstesElement||fooo||blabla||töhö';  // Dieser String wird in das Array geschrieben.
  exparr := explode('||', s); // String in Array speichern.

  for x:=0 to High(exparr) do // alle Elemente durchlaufen
    ShowMessage('String = '+s+#13+#10+'Index = '+inttostr(x)+#13+#10+#13+#10+exparr[x]);  // und eine Messagebox ausgeben
end;


Ihr solltet hierbei nacheinander Message Boxes bekommen die so aussehen:
Zitat:
String = ErstesElement||fooo||blabla||töhö
Index = 0,1,2,3

Das entsprechende Item

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.


Zuletzt bearbeitet von Tweafis am Mi 25.06.03 13:56, insgesamt 2-mal bearbeitet