AGB  ·  Datenschutz  ·  Impressum  







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

blockwrite sehr sehr große datei.

Ein Thema von snow · begonnen am 27. Jan 2008 · letzter Beitrag vom 29. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 08:51
Zitat von himitsu:
Zitat von alzaimar:
Der optionale dritte Parameter gibt die Anzahl der *Records* an, die geschrieben werden.
Größe eines Records
Anzahl RTM.
Zitat von Die Delphi OH:
procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
Description
BlockWrite writes Count or fewer records to the file F from memory,...
Das es aus heutiger Sicht merkwürdig ist, keine Frage. Aber der Befehl stammt nun mal aus dem Mittelalter, was soll man machen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#12

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 08:55
ups ja ... BlockWrite
der optionale Zweite bei Reset/Rewrite war die Recordgröße
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#13

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 09:33
Moin, Moin.

Interessant, was man in diesem Thread so alles über BlockWrite erfährt - obwohl ich es seit 25 Jahren verwende. Allerdings (natürlich) nicht in der vorgestellten Anwendungssituation; hier wäre eine typisierte Datei sicherlich angebrachter.

Eines fällt mir dabei auf: Es fehlt in den Beispielen die obligatorische Fehlerprüfung mit IOresult! Wenn schon Steinzeitprogrammierung, dann bitte reset/rewrite mit {$I-} und {$I+} "einrahmen" - das haben wir doch wohl so gelernt und es gehört zum richtigen "Steinzeit-Feeling" unbedingt dazu, oder etwa nicht?

Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 09:37
Quatsch Der wahre Programmierer schert sich einen Dreck um korrekte Fehlerbehandlung! Profis programmieren ohne Netz und doppelten Boden und lassen die Anwendung gegen die Wand fahren. Nur so bekommt man ohne Mehraufwand aussagekräftige Fehlermeldungen, die nur der Programmierer versteht. Das verschafft Respekt und Ansehen!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#15

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 09:45
na, ist was dran, in der Steinzeit hat man das alles nicht so eng gesehen und die Anwender waren auch etwas robuster und schmerzunempfindlicher ...
Ralph
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#16

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 14:10
Delphi-Quellcode:
var
  Form1: TForm1;
  Num : Array of byte;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var dat : file;
lokal : integer;
begin
AssignFile(dat,'I:\delphi\testContainer\test1.dat');
rewrite(dat);
Blockwrite(dat,num[0],1);
closefile(dat);
end;

procedure TForm1.FormCreate(Sender: TObject);
var lokal : integer;
begin
setlength(num,128);
for lokal:=0 to 127 do begin
num[lokal]:=lokal;
end;
end;
so klappt es.

ich kann nun den gesammten array inhalt speichern.

naja anscheinend muss ich bei blockwrite immer 128 byte schreiben. Dies wäre natürlich verschwendung. via move in ein 128byte langes array zu schreiben. wenn ich nun z.b einen int32 10 bytes und einen 6 stelligen string(7bytes) abspeichern will,

schiebe ich zuerst den integer in array[0..3],
dann die 10 bytes in array[4..13],
dann den string in array[14..20]

im inhaltsverzeichniss der datei gebe ich dann nicht die blocknummer sondern die byte nummer an.

Diese wird durch 128 geteilt und der rest sollte die bytenummer im block angeben.

ich mach mich mal ran

gruß snow
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#17

Re: blockwrite sehr sehr große datei.

  Alt 28. Jan 2008, 15:46
Siehe mein Test:

du muß nur beim Öffnen der Datei eine Größe oder einen passenden Typ angeben:
Delphi-Quellcode:
var dat : File of Byte;
Rewrite(dat);

// oder

var dat : file;
Rewrite(dat, 1);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: blockwrite sehr sehr große datei.

  Alt 29. Jan 2008, 06:58
@snow: Verwende doch Streams. BlockRead/BlockWrite sind veraltet (stand vorher schon irgendwo). Wirklich, halte Dich nicht mit diesen ollen Kamellen auf. Du musst Dich doch eh einarbeiten, da wäre es doch sinnvoll, es gleich mit den richtigen Werkzeugen zu tun. Und das sind nun mal Streams.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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