Daten in Datei speichern

codeman

Erfahrenes Mitglied
Hallo,

Ich habe das Problem dass ich sehr viele Werte in einer Datei speichern und wieder auslesen will. Es handelt sich z.B.: um Positionswerte, kurze Strings und auch Listen.

Code:
Element1
Left:4
Top:4
Width:100
Height:100
Caption:Text
Element2
Left:...
usw.

Ich möchte diese Werte jetzt in einer Datei speichern. Ich hab ein System entwickelt das diese Werte zeilenweise als Text speichert, mit eindeutigen Schlüssen versieht.... und noch so einiges macht.

Das ist allerdings sehr kompliziert und - mein Hauptproblem - sehr langsam.
Wie machen das Anwendungen wie zum Beispiel Powerpoint, Excel?

Vielleicht kann mir jemand helfen. Für VB6 hab ich mal ein Beispiel gehabt, nur funktioniert das unter .Net nicht mehr.

Danke im Voraus,
codeman
 

Christian Kusmanow

Erfahrenes Mitglied
Was genau ist denn da langsam? Das aufschlüsseln der Werte aus dem Textfile
oder das versehen eben dieser mit deinen sog. Schlüsseln?
Für was werden die Werte gebraucht und wo speicherst es hin?
Wie wird das File überhaupt erzeugt?

Fragen über Fragen... :D
 

codeman

Erfahrenes Mitglied
Hallo,

Langsam? An einer Datei mit rund 140 Zeilen kaut er schon mal eine Minute (Liegt an meinem Algorithmus, also dem Auslesen der Werte. Bitte nicht lachen ;-))

Die Werte sind Werte von Elementen auf einem Formular. Mit dem Programm kann man verschiedenes layoutieren. Also: Textfelder, Linien, Rechtecke, Bilder... das übliche eben.
Und Tabellen will ich auch noch speichern.

Ich speicher sie in eine Textdatei - (ich nehme an da liegt das Problem) - Meine sogenannten Schlüssel definieren im Text Controls, Forms und soweiter.

Was meinst du mit wie wird das File erzeugt?

codeman
 

Nico Graichen

Erfahrenes Mitglied
Hi,

Also für das was du vor hast, würde sich XML perfekt eignen. Damit kannst du auch Struktur in deine Daten bringen. Ich kann mir vorstellen, dass dein Algorithmus bei Container doch ganz schön in straucheln gerät.
Also an Xml ist hier aus meiner Sicht kein Weg vorbei.
Am besten du erstellst dir ein Schema und die dazugehörigen Klassen und lässt dir deine Daten per Serializer schön zurecht rücken und fertig ist deine Form (ein paar Anpassungen von hand könnten noch vorkommen ;) )
 

Norbert Eder

Erfahrenes Mitglied
Wennst nicht den Built-In Serializer verwendest, sondern deinen eigenen, könntest gleich die ganze Form serialisieren, als XML oder Binary speichern und dann einfach von dort wieder deserialisieren, in ein Objekt mappen und darstellen ;-)
 

codeman

Erfahrenes Mitglied
Danke für die Antworten!

XML ist eine gute Idee, und ich werde mich sicher noch weiter damit beschaftigen.

@Norbert Eder
Der Vorschlag ist nicht schlecht... ob ich das hinkriege ist eine andere Sache:).
 

Christian Kusmanow

Erfahrenes Mitglied

MichiStroi

Erfahrenes Mitglied
Schreib es doch einfach binär in eine Datei!
Das ist bestimmt das schnellste. (Braucht ja auch am wenigsten Speicherplatz!)
Code:
StreamWriter sw = new StreamWriter(FileName);
BinaryWriter bw = new BinaryWriter(sw.BaseStream);
bw.Write(Modul.bPause);
bw.Write(Modul.dMapStretch);
bw.Write(Modul.dSpeed);
bw.Write(Modul.sMapFileName.Length);
bw.Write(Modul.sMapFileName.ToCharArray());
bw.Write(Modul.dZoom);
und Auslesen geht dann nach dem exakt gleichen Muster
Code:
StreamReader sw = new StreamReader(FileName);
BinaryReader bw = new BinaryReader(sw.BaseStream);
Wert = bw.ReadBoolean();
Wert = bw.ReadDouble()
Wert = bw.ReadDouble()
Modul.sMapFileName = new String(br.ReadChars(br.ReadInt32()));
Wert = bw.Write(Modul.dZoom);
Schöne Grüße
Michi
 

Nico Graichen

Erfahrenes Mitglied
MichiStroi hat gesagt.:
Schreib es doch einfach binär in eine Datei!
Das ist bestimmt das schnellste. (Braucht ja auch am wenigsten Speicherplatz!)
Da er aber die Größe, Position,... von Fenstern und Controls speichern will, hilfst das binäre speichern nicht wirklich. Bei Xml hat er (wie oben schon geschrieben), den Vorteil, dass er über einen Serializer direkt seine Form daraus generieren kann ohne vorher umständlich die Daten zu parsen.