Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   PropertyList - Verwalten von .plist Dateien (https://www.delphipraxis.net/186729-propertylist-verwalten-von-plist-dateien.html)

Sir Rufo 24. Sep 2015 18:04

PropertyList - Verwalten von .plist Dateien
 
Für das Lesen, Bearbeiten und Speichern von .plist Dateien gibt es jetzt auch etwas für Delphi.

github - PropertyList

Das hier
Delphi-Quellcode:
var
  LPList: IPList;
  LDict : IPListDict;
  LData : TArray<Byte>;
  LIdx : Integer;
begin
  LDict := TPList.CreateDict;
  LDict.AddOrSet( 'Array', TArray<TPlistValue>.Create( True, False, CFDate( Now( ) ), Random( 42 ), Random * 42 ) );
  LDict.AddOrSet( 'Bool_True', True );
  LDict.AddOrSet( 'Bool_False', False );
  LDict.AddOrSet( 'Date', CFDate( Now( ) ) );

  SetLength( LData, Random( 5 ) + 5 );
  for LIdx := low( LData ) to high( LData ) do
    begin
      LData[ LIdx ] := Random( 256 );
    end;

  LDict.AddOrSet( 'Data', LData );
  LDict.AddOrSet( 'Integer', Random( 42 ) );
  LDict.AddOrSet( 'Real', Random * 42 );
  LDict.AddOrSet( 'String', 'foo' );

  LPList := TPList.CreatePList;
  LPList.Root := LDict;
  LPList.SaveToFile( '.\foo.plist' );
end;
erzeugt dann so etwas
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version="1.0">
  <dict>
    <key>Integer</key>
    <integer>8</integer>
    <key>Data</key>
    <data>y2JTU/3t</data>
    <key>Array</key>
    <array>
      <true/>
      <false/>
      <date>2015-09-24T17:12:06.671+02:00</date>
      <integer>7</integer>
      <real>12.8174069174565</real>
    </array>
    <key>Bool_False</key>
    <false/>
    <key>String</key>
    <string>foo</string>
    <key>Bool_True</key>
    <true/>
    <key>Date</key>
    <date>2015-09-24T17:12:06.671+02:00</date>
    <key>Real</key>
    <real>1.60754230152816</real>
  </dict>
</plist>
Getestet mit Delphi 10 Seattle unter
  • Win32
  • Win64
  • OSX32
  • iOSDevice32
  • iOSSimulator
Bis dato wird nur die XML-Variante unterstützt.

Ob die Binary-Variante noch kommt entscheide ich wenn ich die Unit-Tests fertig habe und es noch ein wenig aufpoliert habe. :stupid:

Das Beispiel ModPList erstellt ein Kommandozeilen-Programm, womit man die von Delphi erzeugten .plist Dateien etwas homogener gestalten kann.

Aus
XML-Code:
<string>YES</string>
wird dann ein
XML-Code:
<true/>
und aus
XML-Code:
<string>NO</string>
analog ein
XML-Code:
<false/>
.

Folgende Bugs flogen mir bei der Entwicklung um die Ohren:

Sir Rufo 25. Sep 2015 01:45

AW: PropertyList - Verwalten von .plist Dateien
 
Wem diese beiden Lösungen nicht zusagender darf sich gerne einmal ModPList anschauen ;)

Union 25. Sep 2015 08:48

AW: PropertyList - Verwalten von .plist Dateien
 
Schönes Projekt, wieder einmal super gemacht. Meine einzige Frage wäre, warum Du auch XML.Win.msxmldom unter Windows aufnimmst, wenn doch eh alles konstant über ADOM4 läuft
Delphi-Quellcode:
GetDOM( sAdom4XmlVendor )
. Falls Du wirklich verschiedene Vendors unterstützen willst z.b. den über die schöne globale DefaultDOMVendor eingestellte, müsstest Du auch deren "Besonderheiten" berücksichtigen.

Sir Rufo 25. Sep 2015 10:18

AW: PropertyList - Verwalten von .plist Dateien
 
Weil ich es ohne dieses Gefrickel - ja so ist das - bis jetzt nicht sauber hinbekommen habe eine XML-Datei mit DOCTYPE zu schreiben und wieder zu lesen.

Irgendetwas fliegt einem da immer wieder um die Ohren (unter Windows).

Aber für Vorschläge wäre ich dankbar :)

Union 25. Sep 2015 10:27

AW: PropertyList - Verwalten von .plist Dateien
 
Hast Du mal ein Beispiel für den DOCTYPE-Versuch?

Sir Rufo 25. Sep 2015 11:21

AW: PropertyList - Verwalten von .plist Dateien
 
Zitat:

Zitat von Union (Beitrag 1316957)
Hast Du mal ein Beispiel für den DOCTYPE-Versuch?

Ei jo, da bastele ich gerade mal so einen Unit-Test zusammen und jetzt funktioniert das ganz hervorragend mit dem ADOM4 Vendor :shock:

Ich werde wohl alt :mrgreen:

Ich schaue mal, ob da in dem Projekt selber etwas klemmt ... danke aber für den Anstoss

Union 25. Sep 2015 11:26

AW: PropertyList - Verwalten von .plist Dateien
 
Der ADOMV4 verhält sich anders als die anderen.

Sir Rufo 25. Sep 2015 12:04

AW: PropertyList - Verwalten von .plist Dateien
 
Zitat:

Zitat von Union (Beitrag 1316961)
Der ADOMV4 verhält sich anders als die anderen.

Mir egal ... MSXML ist jetzt raus und es funktioniert so wie erwartet :)
(Mal sehen wie das nach dem Fix von Emba ist)


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