AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Smallint und Byte in einer Datei speichern???
Thema durchsuchen
Ansicht
Themen-Optionen

Smallint und Byte in einer Datei speichern???

Ein Thema von Nikolas · begonnen am 7. Sep 2004 · letzter Beitrag vom 8. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 20:10
Gudn Abend, ich würde gerne ein paar hundert kb Byte-Variablen und 2 Smallints speichern. Dabei geht's mir vor allem um die resultierende Dateigröße, da die Dateien auch an Modem-User übermittelt werden sollen und das eben so schnell wie möglich. Leider passen die Smallints nicht in eine ByteVariable und die Größe einer Ini hab ich auch schon überschritten. TBigIni hab ich auch schon über die Suche gefunden, nur will(darf) ich für das Programm keine Fremdkomponenten benutzen.
Hat da jemand eine Idee, wie ich das am Besten (Kleinsten) verpacken kann?

THXbyTOX
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 20:12
Das kleinste ist eine typisierte Datei, in der du die ganzen Zahlenwerte binär reinschreibst. Noch kleiner wird das, wenn dus vor der Übertragung komprimierst.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 20:15
Ähm, kleine Frage: Wie mach ich das??? Das Problem ist eben, dass auch andere ohne großen Aufwand die Daten benutzen können.
Eine typisierte Datei kenn ich bis jetzt nur als 'file of Byte' o.Ä.
Wie muss ich da was typisieren um das so zu machen, wie du's beschrieben hast?

Danke schonmal
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 20:41
Ganz einfach. Ich nehme jetzt mal als Beispiel Byte-Variablen:

Delphi-Quellcode:
var datei: File of Byte
begin
AssignFile (datei, 'C:\datei.dat');
ReWrite (datei);
Write (datei, DeinByte);
CloseFile (datei);
Und:
Delphi-Quellcode:
var datei: File of Byte
begin
AssignFile (datei, 'C:\datei.dat');
Reset (datei);
Read (datei, ErstesByte);
Read (datei, ZweitesByte);
CloseFile(datei);
P.S. siehe Signatur ...
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 20:46
OK, typisierte Datei ist vielleicht nicht ganz korrekt, denn du speicherst ja nicht nur einen bestimmten Record bestimmte Male ab, sondern nur einzelne Bytes bzw. Smallints.
Ich würde einen Filestream empfehlen, damit bist du flexibler als mit den alten Pascal-Files. Du schreibst also ganz einfach per Delphi-Referenz durchsuchenTFileStream.Write deine Zahlen in die Datei mit Sizeof(Datentyp) als Größe. Dann musst du nur noch irgendwo (am besten am Anfang) festhalten, wie viele Daten welchen Datentyps gespeichert sind, damit die Datei auch wieder ausgelesen werden kann.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 21:36
@ jfheins: Danke, das hatte ich schon, ich brauchte was um verschiedene VariablenTypen zu schreiben.

@ Chewie: Danke das hat mich weitergebracht, und zwar hierher:

schreiben:
Delphi-Quellcode:
stream: TFilestream;
a:integer;
begin
stream:=TFileStream.Create(Filename,fmcreate or fmShareExclusive);
a:=213213;
stream.Write(a,16);
stream.Destroy; //Filename ist eine String-Konstane
Lesen:
Delphi-Quellcode:
stream:=TFileStream.Create(fame, fmOpenRead or fmShareExclusive);
Stream.Read(a,16);
showmessage(inttostr(a));
stream.destroy;
Meine Idee war, die beiden Smallints (sind immer Zwei) in die ersten 2*16 Bit zu schreiben, und dann die Bytes in 8 Bits jeweils bis ans Ende der Datei zu schreiben.
Jetzt hab ich das Problem, dass mein Lesen zwar die '213213' richtig angezeigt werden, dann aber eine AV bekomme. Ich seh da leider nicht, für was ich die verdient habe
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#7

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 21:59
Wo ist denn der Code dafür? In dem was ich da sehe rufst du ein Stream.Destroy auf - damit bekommst du natürlich eine AV wenn du weiter auf Stream zugreifst.

PS: nimmer mal lieber Free bzw. FreeAndNil statt Destroy
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 22:07
Das sind zwei unabhängige Procedures die jeweils ein Stream: tFilestream als lokale Variable haben. Da dürfte es eigenlich nicht zu Problemen kommen.
Was ist der Vorteil von Free, bzw FreeandNil?? Da das meine erste Verwendung von FileStream ist, wollte ich erstmal das Speichern von einem Smallint testen, der Rest kommt dann, wenn das gut klappt.

Danke
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#9

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 22:10
Ja, aber wo ist denn der Code zum weiteren Bytes lesen/schreiben? Ohne Code ist Fehlerdiagnose bissl schwehr... ich dachte mir, vielleicht hast du dein destroy einfach an der falschen stelle...
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Smallint und Byte in einer Datei speichern???

  Alt 7. Sep 2004, 22:17
mehr hab ich noch nicht. Ich bin erst noch ein bischen am Testen.
Delphi-Quellcode:
procedure LoadFilestream(fname: string);
var
stream: TFilestream;
a:integer;
begin
stream:=TFileStream.Create(fname, fmOpenRead or fmShareExclusive);
Stream.Read(a,16);
showmessage(inttostr(a));
stream.destroy;
end;

procedure SaveFileStream(filename: string);
var
stream: TFilestream;
a:integer;
begin
stream:=TFileStream.Create(Filename,fmcreate or fmShareExclusive);
a:=213213;
stream.Write(a,16);
stream.Destroy;
end;
Beim Aufruf bin ich mir sicher, dass da nichts komisches reinkommen kann.

Das ist bis jetzt alles und ich seh keinen Fehler
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz