![]() |
Delphi-Version: XE
StringList - merkwürdiges Verhalten
Hallo,
ich habe bisher unter D2007 folgenden Code problemlos eingesetzt:
Delphi-Quellcode:
In der StringList sind definitiv 1202 Zeilen in folgender Form:
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; 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 |
AW: StringList - merkwürdiges Verhalten
Copy(sl[i],4,10) meinst Du nicht ?
|
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 |
AW: StringList - merkwürdiges Verhalten
Hast Du denn einmal die beiden Werte im Debugger verglichen?
|
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:
Ist nämlich KEIN NameValueSeparator enthalten, gibt ValueFromIndex immer einen Leerstring zurück. Diese Funktionen werden eigentlich für Wertepaare eingesetzt (wie INI).
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 P.S.: Programmierer die nicht debuggen kommen in die Hölle (Steve McConnel). |
AW: StringList - merkwürdiges Verhalten
Ersetzt mal den Bindestrich mit einem Gleichheitszeichen ...
ValueFromIndex findet nichts! |
AW: StringList - merkwürdiges Verhalten
Zitat:
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:
|
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. |
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 ;) |
AW: StringList - merkwürdiges Verhalten
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
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