Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   StringList - merkwürdiges Verhalten (https://www.delphipraxis.net/164000-stringlist-merkwuerdiges-verhalten.html)

harfes 25. Okt 2011 06:49

Delphi-Version: XE

StringList - merkwürdiges Verhalten
 
Hallo,

ich habe bisher unter D2007 folgenden Code problemlos eingesetzt:

Delphi-Quellcode:
procedure DatumInMemo(datum:String);
var
sl : TStringList;
begin
.....(hier wird kdname und tourtxt ermittelt)...
for i := 0 to sl.Count - 1 do
begin
    sldatum:=copy(sl.ValueFromIndex[i],3,10);
    if (sldatum=datum) then
    begin
        Memo1.Lines.Add(kdname+': '+tourtxt);
    end;
end;
end;
In der StringList sind definitiv 1202 Zeilen in folgender Form:

FR 06.02.2009 14:00 - 06.02.2009 15:45
FR 06.11.2009 14:00 - 06.11.2009 15:45
FR 13.11.2009 14:00 - 13.11.2009 15:45

Wie oben ersichtlich, möchte ich nun das erste Datum der jeweiligen Zeile in der
StringList (deshalb der copy-Befehl) mit einem vorgegebenem Datum vergleiche, wenn
das dann gleich ist, werden bestimmt Variablen in ein Memofeld geschrieben.
So weit so gut - unter D2007 läuft das völig problemlos! Wenn ich die selbe Routine
unter Delphi XE (NICHT XE2!) kompiliere, dann gibt es zwar keine Fehlermeldung...ABER
auch keine Einträge in dem Memofeld mehr. Wenn ich mir mit einem showmessage die
Variable sldatum anschaue, kommt da nix mehr an...

Hat da jemand eine Idee????

Hartmut

Bummi 25. Okt 2011 06:57

AW: StringList - merkwürdiges Verhalten
 
Copy(sl[i],4,10) meinst Du nicht ?

harfes 25. Okt 2011 07:17

AW: StringList - merkwürdiges Verhalten
 
Nochmal: die procedure funktioniert problemlos mit D2007 - also ist es egal,
ob
copy(sl.ValueFromIndex[i],3,10);
oder
copy(sl[i],4,10);
Es ist zwar kürzer, macht aber trotzdem keinen Unterschied - allerdings fängt der
String mit Index 0 an, so dass für copy Index 4 das erste Zeichen des Datums nicht
mitkopiert wird...

Die Frage ist doch, was hat sich an der copy-Funktion geändert von D2007 nach
DelphiXE?

Hartmut

DeddyH 25. Okt 2011 07:21

AW: StringList - merkwürdiges Verhalten
 
Hast Du denn einmal die beiden Werte im Debugger verglichen?

Union 25. Okt 2011 07:40

AW: StringList - merkwürdiges Verhalten
 
Du enthältst uns etwas über die Struktur der Zeilen vor. ValueFromIndex holt nämlich den hinter einem NameValueSeparator (z.B. Gleichheitszeichen) stehenden Wert eines Strings in einer Stringliste. Kann also nur funktionieren wenn der Aufbau in etwa so wäre:

Code:
Tour1=FR 06.02.2009 14:00 - 06.02.2009 15:45
Tour2=FR 06.11.2009 14:00 - 06.11.2009 15:45
Tour3=FR 13.11.2009 14:00 - 13.11.2009 15:45
Ist nämlich KEIN NameValueSeparator enthalten, gibt ValueFromIndex immer einen Leerstring zurück. Diese Funktionen werden eigentlich für Wertepaare eingesetzt (wie INI).

P.S.: Programmierer die nicht debuggen kommen in die Hölle (Steve McConnel).

ConnorMcLeod 25. Okt 2011 07:44

AW: StringList - merkwürdiges Verhalten
 
Ersetzt mal den Bindestrich mit einem Gleichheitszeichen ...
ValueFromIndex findet nichts!

himitsu 25. Okt 2011 07:44

AW: StringList - merkwürdiges Verhalten
 
Zitat:

Es ist zwar kürzer, macht aber trotzdem keinen Unterschied - allerdings fängt der
String mit Index 0 an,
Es macht einen großen Unterschied, wie Union eben schon sagte.
SL[i] entspricht SL.Strings[i], was aber garantiert nicht SL.ValueFromIndex[i] entspricht.

Und die Chars in den Delphi-Strings beginnen immer bei Index 1, nicht bei 0.

Zitat:

Zitat von ConnorMcLeod (Beitrag 1132369)
Ersetzt mal den Bindestrich mit einem Gleichheitszeichen ...
ValueFromIndex findet nichts!

Oder NameValueSeparator anpassen.

Satty67 25. Okt 2011 07:57

AW: StringList - merkwürdiges Verhalten
 
Wenn der String kein Key/Value Trenner hat, wird bei D2007 scheinbar sogar das erste Zeichen durch ValueFromIndex abgeschnitten.

Würde auch das "funktionierende" Copy mit falsch gesetztem StartIndex in D2007 erklären.

Union 25. Okt 2011 08:04

AW: StringList - merkwürdiges Verhalten
 
Ja, früher wurde (simpel, fehlerhaft, krank und unperformant) einfach der Namenswert des Index genommeen, und ab der Länge+2 kopiert. Jetzt wird wirklich die Position des Trenners verwendet.

Immerhin hat der TE dadruch jetzt festgestellt, dass er jahrelang eine umständlich und nicht für den Zweck vorgesehene Funktion verwendete ;)

p80286 25. Okt 2011 08:24

AW: StringList - merkwürdiges Verhalten
 
Zitat:

Zitat von Union (Beitrag 1132374)
Ja, früher wurde (simpel, fehlerhaft, krank und unperformant) einfach der Namenswert des Index genommeen, und ab der Länge+2 kopiert. Jetzt wird wirklich die Position des Trenners verwendet.

Du willst mich veräppeln?!

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Seite 1 von 2  1 2      

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