Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.214 Beiträge
 
Delphi 12 Athens
 
#9

Re: Lange Strings (> 255 zerlegen und in Stringliste übe

  Alt 15. Mär 2006, 11:45
Also, da es in dem ersten Code eh keine ShortStrings gab, hätten eine kleine Änderung alles gelöst.

In dieser Zeile entweder die 255 entfernen, also durch Length(H) - t, oder da Copy eh die Länge nochmal überprüft/anpasst auch Length(H), oder einfach nur MaxInt.
H := copy(H,t+1,255); // Reststring Oder ganz einfach, warum Copy, wenn ein Delete eh besser wärde
(also einfach die Zeile durch folgende erstetzt und fertsch)
Delete(H, 1, t); // Reststring

PS: da SText eh nicht als const/var definiert ist, kann ja auch gleich damit gearbeitet werden, dezu war S eh nicht nätig, also wie gefällt dir dann das?
Delphi-Quellcode:
function Zerlege(SText: String): TStrings;
  var t: Integer;
  begin
     Result := TStringList.Create;

     // Baue Stringliste auf
     while length(SText) > 0 do
     begin
        t := Pos(';' , SText);
        if t > 0 then
        begin
          Result.Add(Copy(SText, 1, t - 1));
          Delete(SText, 1, t);
        end
        else
          Result.Add(SText);
     end;
  end;
Oder mal ohne den String zu verändern ...
Delphi-Quellcode:
function Zerlege(const SText: String): TStrings;
  var t, t2: Integer;
  begin
     Result := TStringList.Create;

     // Baue Stringliste auf
     t := 1;
     while length(SText) > 0 do
     begin
        t2 := PosEx(';' , SText, t + 1);
        if t2 = 0 then t2 := length(SText) + 1;
        Result.Add(Copy(SText, t + 1, t2 - t - 1));
        t := t2;
     end;
  end;
Ich weiß, PosEx gibt's noch nicht, aber in der CodeLib hab'sch dafür ja den Ersatz hinterlegt


Oder ganz einfach:
wenn dir der Code von Der_Unwissende nicht gefällt:
Delphi-Quellcode:
function Zerlege(const SText: String): TStrings;
  begin
     Result := TStringList.Create;
     Result.Lines.Text := StringReplace(SText, ';', #13#10, [rfReplaceAll]);
  end;
$2B or not $2B
  Mit Zitat antworten Zitat