Autor |
Beitrag |
CoWa
      
Beiträge: 17
Windows XP Embedded
|
Verfasst: 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
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:
| 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 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; |
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:
| 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; |
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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: 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.
Delphi-Quelltext 1:
| implodestring := Implode(',',explodearray); |
|
|
CoWa 
      
Beiträge: 17
Windows XP Embedded
|
Verfasst: Mo 08.09.08 14:47
Danke euch, funktionert  Gruß CoWa
|
|
|