Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringlist mit TDateTime (https://www.delphipraxis.net/160411-stringlist-mit-tdatetime.html)

zeras 11. Mai 2011 19:06

Delphi-Version: 2009

Stringlist mit TDateTime
 
Hallo,

ich nutze für ein Projekt eine Stringliste und wollte dazu ein Datum mit Addobject hinzufügen.
Ist so etwas möglich?
Hintergrund ist, dass ich eine Stringliste für Dateien nutze und das Erstellungsdatum gleich mit dranhängen wollte, um es später separat zu nutzen.

So geht es offensichtlich nicht.

Delphi-Quellcode:
 SL.AddObject(s, TObject(DT));

jfheins 11. Mai 2011 19:33

AW: Stringlist mit TDateTime
 
Möglich ja, aber nicht so.
TDateTime ist ein double, also 64bit lang - TObject ist bis jetzt nur 32bit lang.

Also entweder eine Klasse schreiben deren einziger Inhalt ein TDatetime ist, oder den TDatetime nach Single casten. Da geht zwar etwas Genauigkeit verloren, aber vielleicht reicht es dir noch ;)

Zitat:

SL.AddObject(s, TObject(Single(DT)));

s-off 11. Mai 2011 19:34

AW: Stringlist mit TDateTime
 
Ok, zu spät...

mirage228 11. Mai 2011 19:37

AW: Stringlist mit TDateTime
 
Alternative: Da Du Delphi 2009 benutzt, wäre eventuell der Typ Delphi-Referenz durchsuchenTDictionary aus der Unit Delphi-Referenz durchsuchenGenerics.Collections was für dich (in diesem Fall: TDictionary<string, TDateTime>). :)

Das geht hier mit einer Dictionary, weil die Schlüssel Dateinamen sind, die wiederum i.d.R. ja nicht doppelt vorkommen. Wenn zu einem bestimmten String (Dateinamen) mehrere Werte (TDateTime) hinzukommen können, ginge diese Lösung mit TDictionary leider nicht.

Viele Grüße

zeras 11. Mai 2011 20:17

AW: Stringlist mit TDateTime
 
Danke für die Tipps.

Das mit Dictionary ist für mich neu. Da müßte ich mich erst einmal reinarbeiten.
Ich werde mal sehen, welches ich einbauen kann.
Problem ist nur, dass ich das in ein bestehendes Projekt einbauen muss, wo für andere Sachen schon die Stringlist verwendet wird. Aber da muss ich halt ein wenig ändern.

Jumpy 11. Mai 2011 20:51

AW: Stringlist mit TDateTime
 
Wäre es denn nicht einfacher das Datum in einen String umzuwandeln? Oder geht dann die spätere Nutzbarkeit verloren?

himitsu 11. Mai 2011 22:49

AW: Stringlist mit TDateTime
 
Zitat:

Zitat von Jumpy (Beitrag 1100276)
Wäre es denn nicht einfacher das Datum in einen String umzuwandeln? Oder geht dann die spätere Nutzbarkeit verloren?

Der String ist ja noch größer, als der TDateTime/Double und wenn schon TDateTime keinen Platz hat..........
Und nein, einen String in einen Pointer zu casten ist keine gute Idee (wer an der Referenzzählung rumspielt und davon keine Ahnung hat, der muß irgendwann dafür leiden), es sei denn man nutzt einen PChar, mit eigenem Speicher, was eben größer ist, als der TDateTime.

Jumpy 11. Mai 2011 23:19

AW: Stringlist mit TDateTime
 
Ich dachte es geht um eine Stringlist...

himitsu 12. Mai 2011 05:30

AW: Stringlist mit TDateTime
 
Das schon, nur daß dieses TDateTime (DT) in .Objects liegen sollte, wärend im .Strings vermutlich schon ein anderer String liegt. :wink:
Zitat:

Delphi-Quellcode:
SL.AddObject(s, TObject(DT));


FredlFesl 12. Mai 2011 06:55

AW: Stringlist mit TDateTime
 
So gehts doch auch:
Delphi-Quellcode:
Type
  TDateTimeContainer = Class
    DateTime : TDateTime;
    Constructor Create(aDateTime : TDateTime)
  End;

Constructor TDateTimeContainer.Create(aDateTime : TDateTime);
Begin
  DateTime := aDateTime;
End;
...
MyStringList.AddObject (MyString, TDateTimeContainer.Create(MyDateTime));
Man muss die Objekte später nur wieder freigeben, das ist alles.

DeddyH 12. Mai 2011 07:58

AW: Stringlist mit TDateTime
 
Zitat:

Zitat von FredlFesl (Beitrag 1100314)
Man muss die Objekte später nur wieder freigeben, das ist alles.

Oder OwnsObjects der Stringliste (gibt es hoffentlich bereits unter Delphi 2009) auf true setzen.

himitsu 12. Mai 2011 09:42

AW: Stringlist mit TDateTime
 
Zitat:

Zitat von DeddyH (Beitrag 1100320)
gibt es hoffentlich bereits unter Delphi 2009

Spätestens seit D2006/TDE sollte es das schon geben.

DeddyH 12. Mai 2011 09:44

AW: Stringlist mit TDateTime
 
Mein Delphi 2007 kennt OwnsObjects in TStringlist definitiv nicht.

himitsu 12. Mai 2011 12:44

AW: Stringlist mit TDateTime
 
Sicher?
Ich dachte ich hätte es schon im TDE gesehn. (ich werd' wohl doch langsam alt und vergesslich)
Aber im D2009 isses auf jeden Fall drin. :angle:

p80286 12. Mai 2011 14:09

AW: Stringlist mit TDateTime
 
Also wenn schon eine eigene Klasse, dann aber mit allen Daten (Größe, erstelldatum,letzte Speicherung etc.)

Und warum nicht gleich ein "vernünftiges" Record, daß dann über TList verwaltet wird?
(oder gleich eine eigene Klasse?)

(Das Datum hinten an den String heranfrickeln ginge zwar, aber ist nur eine Bastellösung)


Gruß
K-H

Hawkeye219 12. Mai 2011 15:05

AW: Stringlist mit TDateTime
 
Hallo,

falls die Dateinamen eindeutig sind, könnte auch der folgende Ansatz zu einer Lösung führen:
Delphi-Quellcode:
var
  FileName: string;
  FileDate: TDateTime;
  List: TStrings;
begin
  :
  if FileAge(FileName, FileDate) then
    List.Add (FileName + '=' + DateTimeToStr(FileDate);
  :
  ShowMessage (List.Values[FileName]);
  :
end;
Der Zugriff auf die Dateinamen muss über die Eigenschaft "Names" der Stringliste erfolgen. Problematisch wird es allerdings, wenn beim Schreiben und Auslesen der Stringliste Systeme mit unterschiedlichen Ländereinstellungen verwendet werden.

Gruß Hawkeye


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