![]() |
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 |
AW: StringList - merkwürdiges Verhalten
Zitat:
Code:
Dafür funktioniert die aktuelle Funktion nur noch mit ShortStrings :wall: Ich vergass den magischen Compiler, der aus Delete ggf. intern WStrDelete macht.
Kopiere MaxInt Zeichen des Strings an der per Parameter übergebenen Indexposition der Stringliste, beginnend ab der Länge plus zwei des Namenswertes des Strings der übergebenen Indexposition der Stringliste.
|
AW: StringList - merkwürdiges Verhalten
Jupp, so isses,
aber wieso soll das nur mit ShortStrings funktionieren? Es gibt keine StringListe mehr mit ANSI, seit D2009 (blöder Weise) ... das ist alles nur noch Unicode (Die Unit AnsiStrings, mit ANSI-Versionen einiger Funktionen enthält ja wohl keine StringListe). [add] achso |
AW: StringList - merkwürdiges Verhalten
Danke für die hilfreichen Tips!
Nachdem ich die Routine jetzt mal - wie von Brummi vorgeschlagen - auf Copy(sl[i],4,10) geändert habe, funzt das ganze auch unter Delphi XE. Die Annahme, dass das in D2007 mit ValueFromIndex[i] nicht so ganz korrekt war, scheint wohl korrekt zu sein - aber es hat trotzdem funktioniert...und mir jetzt mit Delphi XE ein Problemchen generiert, mit dem ich absolut nicht gerechnet hatte. Hartmut |
AW: StringList - merkwürdiges Verhalten
In #3 hattest Du noch das Gegenteil behauptet :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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