Entwickler-Ecke
Sonstiges (Delphi) - Variante gesucht Daten effektiv abzuspeichern
skriiva - So 02.05.10 16:11
Titel: Variante gesucht Daten effektiv abzuspeichern
Hallo Leute, ich habe eine mehrfach verkettete Liste vorzuliegen. Der Hauptstrang der Liste enthält Automarken. In den einzelnen Knotenpunkten(Automarken)befinden sich die Modelle der Marke.
Es gibt die Möglichkeit vor jede Zeichenkette einen Schalter zu setzen. Zum Beispiel Mercedes wird zu MMercedes für Marke-Mercedes und als Modell S600 zu TS600 für Typ-S600. Allerdings verbrauche ich jedes mal ein zusätzliches Byte die Schalter.
Deshalb suche ich nach einer weiteren Möglichkeit die Daten effektiv abzuspeichern.
Info:
Die Marken und Typen sind ShortStrings in meinem Programm
lg. skriiva
Moderiert von
Narses: Bild als Anhang hochgeladen.
jfheins - So 02.05.10 18:05
skriiva hat folgendes geschrieben : |
| Effektiv bedeutet für mich platzsparend, intelligent und wie es professionelle Firmen tun würden. |
Ein Widerspruch :mrgreen:
Falls du meine Meinung hören möchtest: Effektiv ist nicht gleichbedeutend mit platzsparend. Wenn du es gerne kompakt abspeichern willst, würde ich sowas empfehlen: "Audi\n\tA3\n\tA4\nBMW\n\t7er" bzw.
Quelltext
1: 2: 3: 4: 5:
| Audi A3 A4 BMW 7er |
Also mit Tabs und Zeilenumbrüchen. Richtig effektiv wäre für mich aber erst sowas in der Richtung:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| <?xml version="1.0" encoding="ISO-8859-1" standalone = "yes" ?> <brands> <brand name="Audi"> <model name="A3" /> <model name="A4" /> </brand> <brand name="BMW"> <model name="7er /> </brand> </brands> |
Du siehst, unsere Definitionen divergieren :mrgreen:
Um dir besser zu helfen: Darf ich fragen wo der Ursprung deiner Platznot liegt?
jaenicke - So 02.05.10 18:16
Dem stimme ich zu (was den Widerspruch angeht meine ich). ;-)
Und es gibt ja noch die Möglichkeit die Daten in einem guten Format (wie eben XML) abzuspeichern und das Resultat dann zu komprimieren, wenn es spezielle Gründe gibt, dass es auf die Größe der abgespeicherten Daten ankommt. Zum Beispiel für Netzwerkübertragungen bzw. Downloads aus dem Internet aus dem Programm heraus usw. macht das ja durchaus Sinn.
skriiva - So 02.05.10 18:28
Stimmt mit dem Widerspruch habt ihr echt Recht :D
Platznot habe ich nicht, aber einen Kopf, der die perfekte Lösung haben möchte :D!
Danke einmal für eure Vorschläge. Ich werder sie mir auch angucken, aber verweile bei meiner neuen Idee.
Die besagt, dass die Modelle durch spezielle ShortString unterbrochen werden.
Bsp.:
File of ShortString
Leerzeichen sind nur zur Überschaubarkeit, also keine integrierten Zeichen
Das Slash symbolisiert, wo der nächste ShortString anfängt.
Split:ShortString;
Split = 'XX';
Audi / A3 / A6 / A8 / Split / BMW / 3 / 5 / 7 / Split / Mercedes / S350 / S450 / S600
So habe ich einen kleinen Überschuss. Ich kenne die Speicherform und die Theorie, allerdings weiß ich nun nicht was sparsammer ist
Beim Speichern wird immer nach einem Modell der Split geschrieben und beim Einlesen mit einem Booleanschalter gearbeitet um zu Wechseln ( Fallauswahl)
jaenicke - So 02.05.10 18:35
Das mag platzsparend sein, aber auch nix anderes. Es ist weder einfach einzulesen, noch einfach zu warten, zu erweitern oder zu speichern.
Eine schöne™ Lösung ist zum Beispiel alles in Klassen zu kapseln. Denen brauchst du dann nur noch LoadFromStream und SaveToStream Methoden zu spendieren, schon kannst du alles wunderbar gekapselt speichern ohne dich um die Interna kümmern zu müssen. Wobei ich auch LoadFromXML und SaveToXML benutze um so direkt XML-Dateien zu verwenden.
Dafür bieten auch meine SJ Config Utils entsprechende Ansätze, auch wenn die noch nicht besonders weit entwickelt sind. Und weshalb du ShortStrings verwendest, verstehe ich noch nicht so ganz. Du bist damit schließlich immer auf bestimmte Stringlängen festgelegt, was das ganze viel zu starr und kaum zu erweitern macht.
skriiva - So 02.05.10 18:39
Ah, das geht mir in Delphi ein wenig zu weit :D. Das ist mein Schulprogrammiersprache :D, aber eigentlich bin ich mit C und C++ unterwegs.
jfheins - So 02.05.10 18:43
Die perfekte Lösung ist sicher nicht die platzsparendste ;)
Denn es ist ja auch lesbarkeit wichtig. Wenn z.B. der User die Datei öffnet, um manuell was hinzuzufügen sollte er das Format zügig erfassen können. Einfach alles hintereinander schreiben mit "XX" als Trenner ist da eher schlecht. Vor allem, wenn dann mal ne Marke oder ein Modell ein "XX" im Namen hat.
Nur so als Gedankenhilfe: Ein Byte Speicherplatz kostet ungefähr 0,0000000000931 Euro - es ist wirklich nicht schlimm, ein paar Bytes zu vergeuden :wink:
Und jetzt das Totschlagargument: Egal wie klein die Datei ist, sie wird mindestens einen Cluster belegen. Irgendwo im Bereich 0,5 bis 4 KB :P
skriiva - So 02.05.10 18:45
Kurz und knapp :D
=> Überzeugt :P
elundril - So 02.05.10 19:02
jfheins hat folgendes geschrieben : |
| Und jetzt das Totschlagargument: Egal wie klein die Datei ist, sie wird mindestens einen Cluster belegen. Irgendwo im Bereich 0,5 bis 4 KB :P |
Nur bei FAT, afaik, oder?
jaenicke - So 02.05.10 19:07
Bei NTFS ist das "genauso", nur da dort in der Regel 4 KB für die Zuordnungseinheiten benutzt werden, ist das nicht viel Slack, der entsteht. Vorhanden ist der natürlich dennoch.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!