AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Packed Record schnell in Datei speichern

Ein Thema von Nalincah · begonnen am 2. Aug 2004 · letzter Beitrag vom 2. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#1

Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:03
Ich hab z.B. folgenden Record:

Delphi-Quellcode:
  Verwaltungsdatei_Header = packed record
    aDatentraeger_Nummer: string[3];        // 1
    xFuellzeichen1: string[3];        // 4
    aBeraternummer: string[7];        // 7
    aBeratername: string[9];        // 14
    xRestart_Kennzeichen: Char;        // 23
    nAnzahl_Datendateien: string[5];    // 24
    nLetzte_Datendateinummer: string[5];    // 29
    xFuellzeichen2: string[95];    // 34
  end;
Nachdem ich ihn gefüllt habe speicher ich ihn so ab:

Delphi-Quellcode:
procedure TFrmMain.Button1Click(Sender: TObject);
var
  ft : TFileStream;
  TF : TextFile;
  FileName:string;
begin
  // Record mit daten füllen
  Fill_Verwaltungsdatei_Header;
  // Datei erstellen und öffnen
  FileName := Edit1.Text + '\EV01';
  AssignFile(TF,FileName);
  Rewrite(TF);
  CloseFile(TF);
  // Daten aus dem Record in die Datei schreiben
  ft := TFileStream.Create(FileName,fmOpenWrite);
  try
    with Verwaltungsdatei_Header do
    begin
      ft.Write(aDatentraeger_Nummer[1],SizeOf(aDatentraeger_Nummer)-1);
      ft.Write(xFuellzeichen1[1],SizeOf(xFuellzeichen1)-1);
      ft.Write(aBeraternummer[1],SizeOf(aBeraternummer)-1);
      ft.Write(aBeratername[1],SizeOf(aBeratername)-1);
      ft.Write(xRestart_Kennzeichen,SizeOf(xRestart_Kennzeichen));
      ft.Write(nAnzahl_Datendateien[1],SizeOf(nAnzahl_Datendateien)-1);
      ft.Write(nLetzte_Datendateinummer[1],SizeOf(nLetzte_Datendateinummer)-1);
      ft.Write(xFuellzeichen2[1],SizeOf(xFuellzeichen2)-1);
    end;
  finally
    ft.free;
  end;
end;
Das ist jedoch sehr umständlich, da ich bei jedem record jedes einzelne Feld einzeln speichern muss. Wie kann ich das automatisieren???
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:08
gib mal in der ide "file" an und drück dann F1 und geh zur "Dateitypen Object Pascal Reference". Schau dir das an und vor allem das Konstrukt "file of ***"
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:11
Warum schreibst du auch alles einzeln rein?
Delphi-Quellcode:
type
  TFoo = record
    Name: String[25];
    ID: Integer;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  Foo: TFoo;
begin
  fs := TFileStream.Create('d:\test.dat', fmCreate);
  try
    Foo.Name := 'Müller';
    Foo.ID := 666;
    fs.WriteBuffer(Foo, sizeof(TFoo));
  finally
    FreeAndNil(fs);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  Foo: TFoo;
begin
  fs := TFileStream.Create('d:\test.dat', fmOpenRead);
  try
    fs.ReadBuffer(Foo, sizeof(TFoo));
    ShowMessage(Foo.Name+', '+IntToStr(Foo.ID));
  finally
    FreeAndNil(fs);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#4

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:19
Wenn ich das richtig verstehe:

Als TextFile abspeichern?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:20
näää. entweder als stream (luckies idee) oder als "file of Verwaltungsdatei_Header" (meine idee)
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:21
Wie "als TextFile" speichern? Ich schreibe genauso eine typisierte Datei wie du. Meine Datei sollte am Ende genauso aussehen, wie mit deiner Methode geschrieben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#7

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:33
Habs mal mit Luckies methode ausprobiert
Leider speichert der mir auch die Anzahl der Zeichen in der Stringkette. Das soll er aber nicht. Guckt euch mal die dateien mit nem hex-editor an. Da wird das verdeutlicht
Angehängte Dateien
Dateityp: rar recordspeichern.rar (292 Bytes, 14x aufgerufen)
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:47
Also, wenn du es als reine Textdatei haben willst, dann musst du es auch so schreiben oder deinen umständlichen Weg in Kauf nehmen. Ist es denn wichtig, dass man die datei auch mit einem Texteditor lesen und bearbeiten kann?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#9

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 14:59
nein, es sind keine textdateien, da auch steuerzeichen vorhanden sind
das mit dem record mach ich so. will halt den record komplett speichern (geht an sich auch ganz gut mit deiner methode) aber ich will die Position 0 (In dem die Länge steht) des Strings nicht mitspeichern. Wie mach ich das?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Giantics

Registriert seit: 17. Nov 2003
Ort: Langenbrettach
99 Beiträge
 
#10

Re: Packed Record schnell in Datei speichern

  Alt 2. Aug 2004, 15:48
Zitat von General2004:
...will halt den record komplett speichern (geht an sich auch ganz gut mit deiner methode) aber ich will die Position 0 (In dem die Länge steht) des Strings nicht mitspeichern. Wie mach ich das?
Darf man fragen, warum die Läng nicht gespeichert werden darf?

Diese Steuerzeichen stören doch überhaupt nicht.

Jedenfalls ist diese Methode ein gesamtes Record zu speichern relativ einfach und sicher.
T. Dieffenbach
"Delphi"-Version: Lazarus 0.9.22

Was ist der Unterschied zwischen Bill Gates und Gott?
-->Gott hält sich nicht für Bill Gates!
  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 11:55 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