Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Value-Abruf aus Tstringlist beinhaltet "=" -> Fehler (https://www.delphipraxis.net/151267-value-abruf-aus-tstringlist-beinhaltet-%3D-fehler.html)

friedemann2009 10. Mai 2010 13:23


Value-Abruf aus Tstringlist beinhaltet "=" -> F
 
Liebe Leute,

ich habe folgenden Code:

Delphi-Quellcode:
Procedure AddiereStringListen(var Quelle, Ziel: tstringlist);
var
 i: integer;
begin
     for i:=0 to Quelle.count-1 do
       if Ziel.Values[Quelle.Names[i]] = '' then Ziel.Add(Quelle.Strings[i])
         else begin
          Ziel.Values[Quelle.Names[i]]:= inttostr(strtoint(Ziel.Values[Quelle.Names[i]]) + 
          strtoint(Quelle.Values[Quelle.Names[i]]));
         end;
end;
Sinn dieser Funktion ist lediglich die Addition zweier Stringlists, die jeweils automatisch erhobene Ausdrücke (->Names) und zu String konvertierte Zahlen (->Values) enthalten (= Wortliste).

Nun passiert es immer wieder, dass bei einigen Additionen aus heiterem Himmel in der Values-Abfrage das Trennzeichen ("=") auftaucht - und folglich einen Fehler bei der Konvertierung in Integer erzeugt. Ich habe aber jetzt mehrfach die Listen gecheckt und ich sehe zwar dann, DASS tatsächlich dieser Wert (z.B. "=8") BEIM ABRUF so aussieht, aber ich kriege nicht heraus, wie das passieren kann. Die beiden Listen (Quelle, Ziel) enthalten VOR DEM ABRUF (d.h. z.B. via .text gecheckt) nämlich an keiner Stelle derartiges.

Hat jemand eine Idee, was ich falsch mache oder welcher Quell-Ausdruck (Wert) versehentlich beim Values-Abruf (Prozess) so fehlinterpretiert wird?

Danke für Eure Mühe und beste Grüße aus dem Südwesten,
friedemann

DeddyH 10. Mai 2010 13:41

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Ich hab zwar nicht ganz verstanden, was Dein Code tun soll, aber wie sieht es so aus?
Delphi-Quellcode:
procedure AddiereStringListen(const Quelle, Ziel: TStrings);
var i: integer;
begin
  for i:=0 to Quelle.count-1 do
    if Ziel.Values[Quelle.Names[i]] = '' then
      Ziel.Values[Quelle.Names[i]] := Quelle.Values[Quelle.Names[i]]
    else
      Ziel.Values[Quelle.Names[i]]:= inttostr(strtoint(Ziel.Values[Quelle.Names[i]]) +
      strtoint(Quelle.Values[Quelle.Names[i]]));
end;

friedemann2009 10. Mai 2010 13:48

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Moin,

danke für deinen Post: aber dadurch ändert sich nichts.

Zitat:

Ich hab zwar nicht ganz verstanden, was Dein Code tun soll
Der Code soll zwei Stringlists mit Werten (z.B. "Hallo=3") miteinander vergleichen und zu ZIELliste hinzufügen, was neu ist bzw. aus QUELLliste hinzuaddieren, was als Names schon in ZIEL enthalten ist.

Also:
QUELLE:
"Hallo=3
gut=4"

ZIEL (bisher):
"neu=2
Hallo=1"

=> ZIEL (neu)
"neu=2"
Hallo=4
gut=4"

Gruß,
friedemann

DeddyH 10. Mai 2010 13:50

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Genau dies sollte mein Code eigentlich erledigen :gruebel:

[edit] Und in einer fehlertoleranteren Version:
Delphi-Quellcode:
procedure AddiereStringListen(const Quelle, Ziel: TStrings);
var i: integer;
begin
  for i:=0 to Quelle.count-1 do
    if Ziel.Values[Quelle.Names[i]] = '' then
      Ziel.Values[Quelle.Names[i]] := Quelle.Values[Quelle.Names[i]]
    else
      Ziel.Values[Quelle.Names[i]]:= inttostr(StrToIntDef(Ziel.Values[Quelle.Names[i]],0) +
      StrToIntDef(Quelle.Values[Quelle.Names[i]],0));
end;
[/edit]

friedemann2009 10. Mai 2010 13:55

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Zitat:

Zitat von DeddyH
Genau dies sollte mein Code eigentlich erledigen :gruebel:

Ja, eben, das tut er auch - nicht anders als meiner es auch schon getan hat.
Die Frage ist daher, ob es in den Verarbeitungsroutinen beim Abruf irgendwelche 'Missverständnisse' gibt, also ein Zeichen irrtümlich als Trennzeichen interpretiert wird und in Folge dann ein Fehler auftritt?!

DeddyH 10. Mai 2010 13:59

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Da bin ich im Moment auch überfragt. Bringt es Besserung, wenn man NameValueSeparator von TStrings noch einmal explizit auf "=" setzt?

friedemann2009 10. Mai 2010 14:08

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Ähm, wie? - .delimiter ist doch was anderes, oder?

shmia 10. Mai 2010 14:11

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Was hältst du von Zwischenvariablen?
Könnte doch sein, dass man damit leichter Debuggen kann,oder?
Delphi-Quellcode:
procedure AddiereStringListen(const Quelle, Ziel: TStrings);
var
  i: integer;
  qname : string; // Zwischenvariable
begin
  for i:=0 to Quelle.count-1 do
  begin
    qname := Quelle.Names[i];
    if Ziel.Values[qname] = '' then
      Ziel.Values[qname] := Quelle.Values[qname]
    else
      Ziel.Values[qname]:= inttostr(strtointDef(Ziel.Values[qname],0) + 
      strtointDef(Quelle.Values[qname],0));
  end;
end;

DeddyH 10. Mai 2010 14:12

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Einfach zuweisen.
Delphi-Quellcode:
Quelle.NameValueSeparator := '=';
Ziel.NameValueSeparator := '=';

friedemann2009 10. Mai 2010 16:50

Re: Value-Abruf aus Tstringlist beinhaltet "=" -&a
 
Zitat:

Zitat von shmia
Was hältst du von Zwischenvariablen?
Könnte doch sein, dass man damit leichter Debuggen kann,oder?
Delphi-Quellcode:
procedure AddiereStringListen(const Quelle, Ziel: TStrings);
var
  i: integer;
  qname : string; // Zwischenvariable
begin
  for i:=0 to Quelle.count-1 do
  begin
    qname := Quelle.Names[i];
    if Ziel.Values[qname] = '' then
      Ziel.Values[qname] := Quelle.Values[qname]
    else
      Ziel.Values[qname]:= inttostr(strtointDef(Ziel.Values[qname],0) + 
      strtointDef(Quelle.Values[qname],0));
  end;
end;

Hey, vielen Dank: das war ne gute Idee. Ich muss zwar erst noch checken, ob das die Ergebnisse doch irgendwie verfälscht, aber auf den ersten Blick sieht es ganz gut aus.

Gruß,
friedemann


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Seite 1 von 2  1 2      

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