"Language" Datei auslesen...per Filepointer oder XML???
-
Hallo mal wieder.
Ich experimentiere gerade mit XML und habe eines meiner Projekte so umgestellt, daß die Anwendungseinstellungen statt einer *.ini aus einer XML Datei gelesen werden.
Dazu habe ich irrXML implementiert was mit sehr gut gefällt.
Da ich in einem anderen Projekt noch ein wenig ein Chaos habe würde ich gerne die Textausgaben- und Fehlermeldungen in einer XML Datei speichern und aus dieser auslesen.
Dazu stelle ich Überlegungen zur Performance an.
Ich habe in einem anderen Projekt eine Sprachdatei erstellt.
Das funktioniert so:
Jedet Text ist maximal 80 Zeichen lang, kürzere Texte werden mit leerzeichen aufgefüllt.
Ich habe eine Funktion die die texte ausliest.
Dieser übergebe ich einen Index, wo sich der text befindet.
Die Funktion springt dann per lseek an die entsprechende Stelle in der Datei und liest den gewünschten Text aus.Funktioniert wunderbar.
Die Texte gebe ich mittels eines Programmes ein, welches mit die Textdatei erstellt die ich nachher im Programm verwende.Wenn ich das jetzt im aktuellen Projekt mit XML umsetzen will, könnte das so aussehen:
Die XML Datei enthält die Texte die über Attribute angesprochen werden:
<DEUTSCH> <TEXT id="1001" txt="Willkommen Ihr Leute"> <TEXT id="1002" txt="Die Buchung war erfolgreich"> usw... </DEUTSCH>Wenn ich das nun mit irrXML mache, dann ist das ja so, daß irrXML erst mal alle XML Nodes ausliest und vergleicht.
IrrXML liest iummer die komplette XML Datei aus und ich kann in einer while Schleife Knoten für Knoten durchrödeln und vergleichen ob ich nun auch den richtigen habe.
Wenn ich nun 1000 Texte habe, dann dauert das ja ewig, während ich mit der o.g. Textdatei direkt zum entsprechenden Index springe, was natürlich enorm schneller ist.
Meine Frage ist nun ob das wirklich so viel länger dauern wird und ob es eine Möglichkeit gibt, in der XML Datei direkt zum text nr.XX zu "hüpfen"...Grüße Mondmann
-
Mondmann schrieb:
Meine Frage ist nun ob das wirklich so viel länger dauern wird und ob es eine Möglichkeit gibt, in der XML Datei direkt zum text nr.XX zu "hüpfen"...
Wie soll das bitte gehen? Es gibt keine direkte Adressierung des Elementes.
XML ist weniger für eine gute und schnelle Adressierung geeignet als besser für eine gute Strukturierung. Um einen kleinen Ausflug in eine andere Sprache zu geben: die WPF arbeitet zum Beispiel mit einem XML-Dialekt (XAML), macht aber aus Performanceschritten für die Ausführung eine Aufbereitung davon.
Am ehesten für deine Anforderungen wären entweder Datenbanken (schneller Indexzugriff) oder Dateien mit fixer Formatierung geeignet (Element 100 steht in der Datei fix an der Stelle 100*fixer Breite...). Bzw. eine Art von DB auf Dateibasis, sprich: ein Index wo der Kurzname/Schlüssel sowie die Stelle im Text steht, so das man nur den Index benötigt um dann schnell navigieren zu können.
cu André
-
Ja so habe ich das ja bisher gemacht, mit der Datei.
Texte stehen an einer bestimmten Stelle und haben eine feste breite.
Beim suchen des Textes springe ich mir lseek*nr direkt zum Text.Ok, dann geht das mit XML nicht, das ist das was ich wissen wollte.
Ich habe schon Programme gesehen die Sprachdateien in XML Dateien hatten mit tausenden von Texten.Eine Möglichkeit wäre ja noch beim Programmstart die XML Datei einzulesen und im Speicher zu halten, was aber zu enormen Speicherverbrauch führen würde.
Also lass ich es so wie es ist:-)
Danke und Grüße Mondmann
-
Mondmann schrieb:
...Ok, dann geht das mit XML nicht, das ist das was ich wissen wollte. Ich habe schon Programme gesehen die Sprachdateien in XML Dateien hatten mit tausenden von Texten.
Ja, möglich ist das natürlich, wenn man die Nachteile in Kauf nimmt (wobei man argumentieren kann, das Rechner immer schneller und Speicher heutzutage auch kein Problem ist).
Der Vorteil an XML ist halt, das man es auch als Kunde leicht editieren kann.
Der Nachteil ist, das es kein Indexzugriff gibt, und man daher die Datei analysieren kann.Du musst einfach abwägen, wo das Ziel liegt. Eine weitere Möglichkeit ist es, die Zugriffe auf die Datei zu begrenzen: z.B. Nur beim ersten Zugriff auf ein Fenster oder beim Umschalten der Sprache die Datei auslesen, und die Übersetzung im Speicher halten (Hier kann man natürlich auch mit einer Art Rundspeicher arbeiten, der sagen wir nur für die letzten 10 Fenster die Übersetzung hält; Oder man generiert einmalig nach jeder Dateiänderung eine den Bedürfnissen angepasste Datei)...
cu André