Autor Beitrag
CoWa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17

Windows XP Embedded

BeitragVerfasst: Mo 08.09.08 12:25 
Hallo,

ich bekomme es hin mit Explode Strings zu teilen, aber Strings aus einem array wieder mit implode zusammenzufügen funktioniert nicht. Die explode/implode Funktion stammt von www.delphipraxis.net/post27344.html

Ideen?

Gruß CoWa


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:
// 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.
// Copyright http://www.delphipraxis.net/post27344.html
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 := AnsiStrPos(P, PChar(Separator));
    if (P = nilor ((Limit > 0and (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;


ausblenden 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:
// Implode fügt alle Elemente von Pieses in einen String aneinander, wobei die
// Elemente durch Glue getrennt werden.
// Copyright http://www.delphipraxis.net/post27344.html
function Implode(const Glue: stringconst 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 > 0and (i > 0then 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;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
var
   a: string;
   explodearray: TStringDynArray;
   implodestring: string;
begin

a := '0,10,20,30,40,50';
explodearray := Explode(',',a,0);
ShowMessage(explodearray[0]);
Implode(implodestring,explodearray);
ShowMessage(implodestring);
end;
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 08.09.08 12:47 
In deiner Implode-Funktion steht Array of String, dort sollte aber TStringDynArray stehen, sonst hast Du ein OpenArray; und die sind inkompatibel zu dynamischen Arrays

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mo 08.09.08 12:54 
Implode ist eine Funktion, die ein Ergebnis zurück gibt und dieses Ergebnis wird bei dir ignoriert.
Der erste Parameter 'Glue' gibt dann das Trennzeichen zwischen den einzelnen Strings an.
ausblenden Delphi-Quelltext
1:
implodestring := Implode(',',explodearray);					
CoWa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17

Windows XP Embedded

BeitragVerfasst: Mo 08.09.08 14:47 
Danke euch, funktionert ;) Gruß CoWa