Resource feststellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Resource feststellen

Beitrag von Adrian »

Servus!

Momentan arbeite ich an einem Programm, in das eine relativ große Resource eingebunden ist. Letztere besteht aus mehr als 1000 Teilen, größtenteils Textabschnitte (reines txt-Format) und ein paar Grafiken im jpg-Format. Es kann aber sein, daß ich auch noch ein paar Klänge mit hineinbringen werde.
Nehmen wir mal an, ich hätte
- Text1_1
- Text1_2
- Text2_1
- Text3_1
usw.
Wie kann ich feststellen, ob es z.B. „Text2_2“ gibt?
Wenn ich sie einfach aufrufe gibt es eine Fehlermeldung, ich möchte aber etwas in der Art wie die Dateiprüfung „FileExists“, dessen Ergebnis ich weiterverarbeiten kann.

Gruß,
Adrian

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Resource feststellen

Beitrag von Socke »

Adrian hat geschrieben:Wenn ich sie einfach aufrufe gibt es eine Fehlermeldung, ich möchte aber etwas in der Art wie die Dateiprüfung „FileExists“, dessen Ergebnis ich weiterverarbeiten kann.
Dann ist das ein guter Zeitpunkt, sich mit Exceptions auseinanderzusetzen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Resource feststellen

Beitrag von Scotty »

In der Unit LResources sind alle Funktionen enthalten, z.B. TLResourceList -> function Find(const Name: AnsiString): TLResource; overload; Und im Wiki steht auch was dazu: http://wiki.freepascal.org/Lazarus_Resources (inklusive der Exceptions-Übung).
PS: Das Konzept scheint mir verbesserungsfähig ("relativ große Resource", "mehr als 1000 Teile, größtenteils Textabschnitte").

Adrian
Beiträge: 31
Registriert: Mo 12. Nov 2007, 12:41
OS, Lazarus, FPC: Winux (L 2.0.6 FPC 3.0.4)
CPU-Target: 64Bit

Re: Resource feststellen

Beitrag von Adrian »

Servus!
An die Exceptions habe ich nicht gedacht, und LazarusResources.Find war mir unbekannt, ist aber genau das, was ich suchte.
Vielen Dank für den Hinweis!
@Scotty: Du meinst das Konzept sei verbesserungsfähig.
Vielleicht kennst du noch die Abenteuer-Spiel-Bücher, die in den 80ern beliebt waren. Das Programm soll so etwas nachbilden. Dazu braucht es für jede „Szene“ den die Handlung erklärenden Text, der teilweise von Bildern und/oder Geräuschen begleitet wird, sowie die Enscheidungsfragen. Da kommt schon was zusammen. In diesen Teilen ändert sich nichts, sie sind von Anfang an fest. Deshalb möchte ich sie einfach mit in die Programmdatei einbinden. Wenn du diese Informationen berücksichtigst, ist dann meine Lösung nicht die einfachste? Aber wenn du eine bessere Idee hast, dann schreib sie bitte hier rein. Mein Konzept ist noch nicht in allen Einzelheiten fixiert, und ich bin immer bereit etwas Neues zu lernen.
Danke und Gruß,

Adrian

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Resource feststellen

Beitrag von m.fuchs »

Hallo,
Adrian hat geschrieben:Du meinst das Konzept sei verbesserungsfähig.
Vielleicht kennst du noch die Abenteuer-Spiel-Bücher, die in den 80ern beliebt waren. Das Programm soll so etwas nachbilden. Dazu braucht es für jede „Szene“ den die Handlung erklärenden Text, der teilweise von Bildern und/oder Geräuschen begleitet wird, sowie die Enscheidungsfragen. Da kommt schon was zusammen.
Ich habe sowas auch mal gemacht und hab als Datenspeicherort dann eine SQLite-Datenbank verwendet. Kann durchaus eine Überlegung wert sein, du hast dann allerdings zwei zusätzliche Dateien, die du mit ausliefern musst.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Resource feststellen

Beitrag von Scotty »

Adrian hat geschrieben:Aber wenn du eine bessere Idee hast, dann schreib sie bitte hier rein. Mein Konzept ist noch nicht in allen Einzelheiten fixiert, und ich bin immer bereit etwas Neues zu lernen.
Wieso willst du die Zusatzdaten welcher Art auch immer nicht in einer extra Datei bereitstellen? Das lässt auch ein einfaches Update/Erweiterung zu, z.B. auch eine andere Sprache. Z.B. per Inifile:

Code: Alles auswählen

with TiniFile.Create('Game.data') do
try
  aTxt:=ReadString('Content','Section_1','not found');
finally
  Free;
end;
Alternativ Xml für eine erweiterte Hierarchie oder Binär. Sehr große Inifiles (>10MB) sind nicht sonderlich performant, aber so viel Text wird es auch wieder nicht geben. In eine Ressource gehören IMHO kurze Jingles, Icons etc., aber schon Bitmaps für Szenerien würde ich auch eher in eine externe Datei packen.

Antworten