![]() |
Mehrere Stringlisten/Bilder in eine Datei
Hi Leute,
ich arbeite derzeit an einer Film-Bibliothek, die mir neben dem Titel noch das Cover und eine Beschreibung anzeigt. Bis jetzt habe ich immer für jedes Cover eine .jpg-Datei und für jede beschreibung eine .txt-Datei genommen. Nun habe ich aber in meinem Data-Ordner schon an die 300 Dateien und die Übersichtlichkeit lässt wirklich zu wünschen übrig, geschweige denn von dem Platz der verschwendet wird. Also habe ich mich mit ini-Files beschäftigt, aber bin bei der Recherche auf ein problem gestoßen: Ini-Files sind von der Größe her begrenzt! Dann bin ich auf XML-Dateien gestoßen, verstehe aber nur Bahnhof, weil ich noch recht wackelig auf den Beien bin(in Bezug auf Programmierung). Meine Frage lautet daher: Welches Datei-Format ist am effizientesten zu realisieren, wenn folgende Bedingungen erfüllt sein müssen: 1. Das erste Wort der Liste ist der Titel des Films. 2. Alle nachfolgenden Zeilen gehören zur Beschreibung(bis zum nächsten Titel). 3. Leerzeilen müssen berücksichtigt werden. Das soll dann so aussehen: --------------------------------- Film 1; Jahr: xxxx Genre: xxxx Regie: xxxx Inhalt Zeile 1 Zeile 2 Zeile n ----------------------------------- |
Re: Mehrere Stringlisten/Bilder in eine Datei
-Datenbank
-Ressourcen-DLL |
Re: Mehrere Stringlisten/Bilder in eine Datei
Wie wärs, wenn du das einfach alles zusammenwirfst?
Du baust eine Datei, die so aufgebaut ist: Zuerst ein Cardinal, das die Anzahl der Filme angibt. Dann für jeden Film ein Cardinal mit der Länge der Textpassage und eines mit der Länge des Coverbildes. Dann klebst du Beschreibung und Coverbild einfach aneinander, und dann kommen wieder die nächsten zwei Cardinals für die Längenbeschreibung etc. etc. |
Re: Mehrere Stringlisten/Bilder in eine Datei
@mkinzler:
Ich habe mir jetzt 2 DDL-Tuts angesehen, verstehe da aber leider NOCH nichts. Wie schon erwähnt bin ich noch ein Frischling in Sachen Delphi. @ DGL-luke: Das klingt ziehmlich kompliziert und ist auch garnicht für mein Programm notwendig. Ich wähle in der ListBox einen Film aus und dann soll nach diesem Titel in der Datei gesucht werden und die Beschreibung in ein memo-Feld eingelesen werden. Die Bilder sollen dann auf dieselbse Weise geladen werden(bilde sollten in einer extra Datei liegen). Kann ich dafür nicht einfach eine Text-Datei nehmen, den Titel suchen und dann alles, was zwischen diesem Titel und dem Nächsten vorkommt, einlesen? An die Bilder will ich dann erstmal garnicht denken(wäre ja schon froh, wenn die vielen txt-Dateien weg wären). |
Re: Mehrere Stringlisten/Bilder in eine Datei
Hi,
also erstmal zum Thema "einfachstes Format", so etwas wird es imho nicht geben. Liegt nur daran, dass einfach viel zu relativ ist (gibt bestimmt Menschen die finden XML einfach). An sich empfiehlt es sich, wenn Du Auszeichnungen/Tags verwendest. Diese markieren eine bestimmte Stelle und treffen eine Aussage über den Inhalt. Das hat den Vorteil, dass die Reihenfolge der Tags und deren Anzahl beliebig sind. Findest Du ein Tag, dass Du nicht kennst, dann ignorierst Du es einfach. Sowohl Ini-Dateien als auch XML folgen dem Prinzip. Bei einer Ini-Datei gibt es Auszeichnungen einer Sektion ([SektionsName]) und untergeordneter Schlüssel-Wertpaare. Die Größenbeschränkung bei Ini-Dateien lässt sich durch andere Units als IniFiles umgehen, such einfach mal nach ![]() Bei XML geht die Strukturierung nur etwas weiter. Hier gibt es Tags, die durch spitze Klammern angezeigt werden. Innerhalb dieses Tags steht dann irgendein String, das ganze wird dann als öffnendes Tag bezeichnet. Zu jedem öffnenden Tag gehört auch immer ein schließendes Tag. Dieses sieht eigentlich aus, wie das öffnende, nur dass ein / vor den Namen gesetzt wird
Code:
Alles was zwischen dem öffnenden und schließenden Tag steht, ist diesem einen Tag untergeordnet. Man betrachtet ein XML-Dokument i.d.R. als ein Baum. Jedes Tag stellt dabei einen Knoten dar. Für Filme könntest Du z.B. einen Baum folgender Form haben:
<Tag>
... </Tag>
Code:
(erinnert vielleicht ein wenig an den Dateibaum, den Dir der Explorer anzeigt, nur hier für Filme :wink:)
Filme
- Film1 - Jahr xxx - Genre xxxx - Regie - Person A - Person B - Person C - Inhalt bla - Film2 - Jahr xxxx - Genre xxx - Regie - Person A - Inhalt bla .... Das ganze kannst Du dann entsprechend in XML umsetzen:
Code:
Gut, ist nicht die 100%ige Entsprechung, aber die Idee dürfte klar sein. Dass ich im letzten Beispiel jetzt Person noch in Name und Nachname unterteile soll nur zeigen, dass Du hier nicht in der Strukturierung beschränkt bist. Zudem steht es Dir frei, ob Du das schließende Tag in die gleiche Zeile oder in eine beliebige andere schreibst. Wichtig ist nur, dass alles was zwischen dem öffnenden und schließenden Tag steht diesem Tag zugeordnet wird.
<Filme>
<Film> <Name> 1 </Name> <Jahr> xxxx </Jahr> <Genre> xxxx </Genre> <Regie> <Person> <Name> Blubb </Name> <Vorname> Blä </Name> </Person> <Person> <Vorname> Foo </Name> <Name> Bar </Name> </Person> </Regie> </Film> </Filme> Eine weitere wichtige Regel für XML ist dann noch, dass Du nur einen Wurzelknoten hast (hier wäre das Filme). Mehrere Knoten sollten auf dieser Ebene (also nach </Filme>) nicht vorhanden sein. Das wäre (vereinfacht) schon alles, was für XML wichtig ist. Es gibt noch jede Menge Dinge rund um XML, wie Namensräume, Transformationen, Schemata und DTD, die sind aber hier noch nicht wichtig. Zudem können XML-Dateien auf den ersten Blick etwas abschreckend wirken, davon solltest Du Dich aber nicht einschüchtern lassen. XML ist ein wirklich einfaches Format! Eine Datei, in der Form der hier geposteten könntest Du so an einen XML-Parser geben, der daraus dann einfach einen Baum für Dich erzeugt. Du hättest jetzt die Wurzel (Filme). Hier kannst Du abfragen, was zwischen dem öffnenden und schließenden Tag steht (sowohl roher Text als auch Kindtags), sowie das aktuelle Tag heißt. In diesem Fall wäre nur ein Kindtag zu finden. Dieses ist wiederum die Wurzel eines Teilbaums, Du kannst also ganz analog vorgehen. Du würdest also als erstes das Tag Filme bekommen. Dem ist das Tag Film untergeordnet Das Tag Film hat nun die Kindtags Name, Jahr, Genre, Regie. Jetzt kannst Du diese Tags nacheinander durchgehen: Das Tag Name enthält den String 1 Das Tag Jahr enthält den String xxxx Das Tag Genre enthält den String xxxx Das Tag Regie enthält die Kindtags Person und Person ... Gruß Der Unwissende |
Re: Mehrere Stringlisten/Bilder in eine Datei
Ich danke dir Der_Unwissende,
ich habe das Grundprinzip verstanden. Dann werde ich mich mal auf die vielen Tutorials werfen, die es gibt. Wenn ich nicht weiterkomme(passiert zu 99,9% :mrgreen: ), melde ich mich wieder. Grüße Frischling EDIT: Soweit ich das verstehe muss ich extra Objekt-Bibliotheken runterladen(z.B.ThaXML-Library). Habe diese Sammlung auch mal geöffnet, aber gleich Fehlermeldungen bekommen. Kann ich mein Vorhabren also nicht mit den Standard-Mitteln von Delphi7 realisieren? |
Re: Mehrere Stringlisten/Bilder in eine Datei
So, die ersten Problemchen stellen sich mir in den Weg und SuFu konnte mir nicht weiterhelfen.
Ich habe eine XML-Datei erstellt und laut Christopher Harms Tutorial geladen.
Delphi-Quellcode:
Prob 1: Wenn ich die XML-Datei lösche, meckert das Programm aber nicht. Auch wird keine neue
procedure TForm1.Create(Sender: TObject);
begin fAppPath:=ExtractFilePath(Application.ExeName); xmlDoc:=CoDOMDocument40.Create; xmlDoc.setProperty('NewParser',true); if not FileExists(fAppPath + DATABASE_FNAME) then begin xmlDoc.LoadXml('<?xml version="1.0"?><Filme></Filme>'); end else xmlDoc.Load(fAppPath + DATABASE_FNAME); if xmlDoc.parseError.errorCode <> 0 then begin MessageDlg('Die XML-Datei ist nicht korrekt!' + #13#10 + 'Das Prog wird nun beendet!', mtError, [mbOk], 0); Application.Terminate; end; if xmlDoc.documentElement.nodeName <> 'Filme' then Application.Terminate; end; XML-Datei erstellt, wie es im Tut steht(Oder wird sie nur in den Speicher geladen und "noch" nicht gespeichert?). Prob 2: Eines der SubNodes soll später die Beschreibung beinhalten. Also suche ich nach einer Möglichkeit in SubNode 1 einen String aus-/einzulesen und in SubNode 2 einen TString aus/-einzulesen. Hier noch der Inhalt der XML-Datei:
Delphi-Quellcode:
P.s.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Filme> <Film> <Titel></Titel> <Beschreibung></Beschreibung> </Film> <Film> <Titel></Titel> <Beschreibung></Beschreibung> </Film> </Filme> Ich verwende das für das Tut nötige MS XML 4.0 |
Re: Mehrere Stringlisten/Bilder in eine Datei
So, hab mal bissel rumgewurschtelt und versucht Titel und Beschreibung jeweils in eine ListBox auszugeben.
Mit den Titeln klappt das wunderbar, aber die Beschreibung wird nicht angezeigt :gruebel: Wenn ich einen Titel in der ListBox anklicke soll die dazugehörige Beschreibung in einr anderen ListBox angezeigt werden.
Delphi-Quellcode:
Bis jetzt sollten, bei klick auf einen Titel, ALLE Beschreibungen angezeigt werden. Aber es tut sich nichts.
Procedure TForm1.UpdateList;
Var Movies1: IXMLDOMNodeList; subNode1: IXMLDOMNode; i: Integer; begin movies1:=xmlDoc.DocumentElement.selectNodes('Film'); ListBoxTitel.Items.Clear; ListBoxTitel.Items.BeginUpdate; For i:=0 to movies1.length -1 do begin subnode1:=movies1[i].selectSingleNode('Titel'); ListBoxTitel.Items[i]:=SubNode1.text; end; ListBoxTitel.Items.EndUpdate; end; procedure TForm1.Button2Click(Sender: TObject); begin UpdateList; end; procedure TForm1.ListBoxTitelClick(Sender: TObject); Var Movies2: IXMLDOMNodeList; subNode2: IXMLDOMNode; i:Integer; begin movies2:=xmlDoc.DocumentElement.selectNodes('Beschreibung'); ListBoxBeschreibung.Items.Clear; ListBoxBeschreibung.Items.BeginUpdate; For i:=0 to movies2.length -1 do begin subnode2:=movies2[i].selectSingleNode('Beschreibung'); ListBoxBeschreibung.Items[i]:=SubNode2.text; end; ListBoxBeschreibung.Items.Endupdate; end; Hat jemand eine Idee, wie ich.... 1. ...die Beschreibungen erstmal anzeigen lassen kann und... 2. ...dann die zum titel gehörende Beschreibung anzeigen lassen kann? Da ich bis gestern mit dem Wort "XML" nichts anfangen konnte, bin ich ja schon froh soweit gekommen zu sein. |
Re: Mehrere Stringlisten/Bilder in eine Datei
Kann mir wirklich keiner helfen, oder stelle ich mich zu **** an?
XML-Dateien scheinen für meine Zwecke ideal zu sein, aber sind sie auch noch zu abstrakt in der Anwendung. D.h. ich komme wirklich nicht weiter :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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 by Thomas Breitkreuz