Autor Beitrag
skriiva
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 02.05.10 16:11 
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.

mv_liste

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 user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von skriiva am Mo 16.06.14 15:11, insgesamt 2-mal bearbeitet
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 02.05.10 18:05 
user profile iconskriiva hat folgendes geschrieben Zum zitierten Posting springen:
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.
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 02.05.10 18:45 
Kurz und knapp :D

=> Überzeugt :P
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 02.05.10 19:02 
user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
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?

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.