Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Param. einer URL ändern: Listenindex überschreitet das Max. (https://www.delphipraxis.net/127901-param-einer-url-aendern-listenindex-ueberschreitet-das-max.html)

klebe7 20. Jan 2009 22:57


Param. einer URL ändern: Listenindex überschreitet das Max.
 
Hallo,

Ich habe nach langen suchen endlich den Fehler in meiner Anwendung gefunden und habe hier mal eine Prozedur, die den Fehler veranschaulicht.

Delphi-Quellcode:
procedure testfunc(const s: string; sl: TStrings);
var
  i: Integer;
  t: string;
begin
  sl.Clear;
  with TStringList.Create do
    try
      Delimiter := '&';
      StrictDelimiter := True;
      DelimitedText := s;

      for i := 0 to Pred(Count) do
      begin
        t := ValueFromIndex[i];
        //showmessage(t);
        ValueFromIndex[i] := ValueFromIndex[i] + '!test!';
        sl.Add(DelimitedText);
        ValueFromIndex[i] := t;
      end;
    finally
      Free;
    end;
end;
Folgender Aufruf klappt ohne Probleme:
Delphi-Quellcode:
var sl:tstringlist;
begin
  sl:=tstringlist.create;
  testfunc('http://test.de/index.php?id=5&s=abc&leer=',sl);
  showmessage(sl.text);
end;
Aber folgender Aufruf erzeugt den Fehler:
Delphi-Quellcode:
var sl:tstringlist;
begin
  sl:=tstringlist.create;
  testfunc('http://test.de/index.php?id=5&s=&leer=',sl);
  showmessage(sl.text);
end;
Kann mir jemand sagen, wieso das so ist und wie man das verhindern kann?

Eigentlich hätte ich diese Ausgabe erwartet:
Zitat:

http://test.de/index.php?id=5!test!&s=&leer=
http://test.de/index.php?id=5&s=!test!&leer=
http://test.de/index.php?id=5&s=&leer=!test!
//
Ich habe herausgefunden, dass der Fehler nur auftritt, wenn 2 mal hintereinander ein leerer Parameter in der URL vorkommt.
Wieso ist das so, etwa ein Bug? :x
//

klebe7 20. Jan 2009 23:31

Re: Param. einer URL ändern: Listenindex überschreitet das M
 
Also ich habe das Problem jetzt erstmal so gelöst:
Delphi-Quellcode:
procedure testfunc(const s: string; sl: TStrings);
var
  i: Integer;
  //t: string;
begin
  sl.Clear;
  with TStringList.Create do
    try
      Delimiter := '&';
      StrictDelimiter := True;
      DelimitedText := s;

      for i := 0 to Pred(Count) do
      begin
        DelimitedText := s;
        //t := ValueFromIndex[i];
        //showmessage(t);
        ValueFromIndex[i] := ValueFromIndex[i] + '!test!';
        sl.Add(DelimitedText);
        //ValueFromIndex[i] := t;
      end;
    finally
      Free;
    end;
end;
Nicht die beste Lösung, aber naja... :roll:

Vielleicht kann mir ja noch jemand sagen, wieso es vorher nicht geklappt hat.

Danke :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz