Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStringlist verliert Strings (https://www.delphipraxis.net/172437-tstringlist-verliert-strings.html)

mentaltec 3. Jan 2013 16:15

Delphi-Version: 5

TStringlist verliert Strings
 
Hallo,

hat schon mal jemand einer TStringList mit

sl.ValueFromIndex[0] := '';

n Leerstring zugewiesen??

jaja, sl.count ist > 0 und die keys stehen drin z.B. 'head='; Values sind alle ''
und ja, in dem Fall sollte sich nichts ändern
aber Pustekuchen : der gösamte String[0] wird gelöscht !!
was soll das?
wei's ich n Leerzeichen zu, funzt es
sind Leerstrings als Value nicht zulässig?

arrrg

DeddyH 3. Jan 2013 16:31

AW: TStringlist verliert Strings
 
Sieht wohl so aus:
Zitat:

Delphi-Quellcode:
procedure TStrings.SetValueFromIndex(Index: Integer; const Value: string);
begin
  if Value <> '' then
  begin
    ...
  end
  else
    if Index >= 0 then Delete(Index);
end;


Popov 3. Jan 2013 16:36

AW: TStringlist verliert Strings
 
Das hat schon seine Richtigkeit, der String wird bewußt von der Klasse gelöscht, weil er keinen Wert hat. Allerdings sollte dir theoretisch dadurch kein Nachteil entstehen, denn ob man den Wert abfragt, wo es keinen Wert gibt, oder wo der String gar nicht da ist, es ergibt in beiden Fällen einen leeren String zurück. Wird der String aber bei so einer Aktion gelöscht, spart das Speicher.

Es ist natürlich Pech wenn man statt mit Values und Names mit ValueFromIndex arbeitet, weil man dadurch den Bezugspunkt verliert.

Da es sich aber hier um eine Klasse handelt, dürfte es kein großes Problem geben sich seine eigene TStringList2 davon abzuleiten und diese Kleinigkeit zu überschrieben.

Bummi 3. Jan 2013 16:46

AW: TStringlist verliert Strings
 
DEL

EDIT: zu spät gesehen dass es bereits von DeddyH beantwortet wurde ...

Helmi 3. Jan 2013 17:43

AW: TStringlist verliert Strings
 
Mann könnts auch (unsauber) so machen:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  S: String;
  SL: TStringList;

begin
  SL := TStringList.Create;

  try
    //Test-String
    sl.Add('hallo=test');

    //Name des 1. Index auslesen und an gleicher Stelle in SL zurückschreiben
    SL.Strings[0] := Format('%s=', [SL.Names[0]]);

    ShowMessage(IntToStr(SL.Count));

    //Wert auslesen
    S := SL.ValueFromIndex[0];

    If S = '' then
      S := '*';

    ShowMessage(S);
  finally
    FreeAndNil(SL);
  end;
end;

mentaltec 4. Jan 2013 09:46

AW: TStringlist verliert Strings
 
ich danke allen, die sich an der Diskussion beteiligt haben.

hätte nicht gedacht, das ein simpler Blick in den Quellcode gereicht hätte

die Bewertung "Pech" ist für dieses imho undokumentierte Verhalten sehr wohlwollend
für mich grenzt eine Funktion, die mit Index als Parameter aufgerufen wird und dann die Indicees der Collection verwursteln kann an Schwachfug

egal, ich werd damit umgehen können - und alle Anderen sind hoffentlich gewarnt


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 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