(Gast)
n/a Beiträge
|
19. Okt 2002, 10:12
So, ausgehend von folgendem Record:
Code:
type
CDrec = record
name,
pos,
comment : string[50];
maxentry,
nr : integer;
entry : array[1..24]of string[70];
end;
habe ich zuerst einen einfachen Versuch gestartet:
Code:
var
CD : CDrec =
(name:'Brandenburg Concertos 1 - 3';
pos:'1'; // mangels besseres Wissen habe ich ´ne Eins benutzt
comment:'Johann Sebastian Bach';
maxentry:9;
nr:1; // auch hier habe ich keine Ahnung, was dies ist
entry:('Allegro',
'Adagio',
'Allegro',
'Menuetto-Trio-Polacca',
'Allegro',
'Andante',
'Allegro assai',
'Allegro',
'Allegro', // das Stück ist das bekannteste, IMHO :o)
'','','','','','','','','','','','','','',''));
procedure TForm1.SaveSimpleClick(Sender: TObject);
var
datei : file of CDrec;
begin
{$I-}
AssignFile(datei,'bc1-3.cd');
ReWrite(datei);
Write(datei,CD);
CloseFile(datei);
{$I+}
end;
Ergebnis: Null Fehler, Datei "bc1-3.cd" ist mit 1,82k vorhanden.
Und nun die Variante, bei der ich das CD-Record seinerseits in ein Array gepackt habe, wobei ich mich aber auf 2 Arrayfelder beschränkt und das zweite auch leergelassen habe:
Code:
var
CDarray : array[1..2]of CDrec = ( // wir wollen ma´ nich´ übertreiben
(name:'Brandenburg Concertos 4 - 6';
pos:'1';
comment:'Johann Sebastian Bach';
maxentry:9;
nr:1;
entry:('Allegro',
'Andante',
'Presto',
'Allegro',
'Affetuoso',
'Allegro',
'Allegro',
'Adagio ma non tanto',
'Allegro',
'','','','','','','','','','','','','','','')),
// und ein leeres
(name:'';
pos:'';
comment:'';
maxentry:0;
nr:0;
entry:('','','','','','','','','','',
'','','','','','','','','','',
'','','','')));
procedure TForm1.SaveAsRecordClick(Sender: TObject);
var
datei : file of CDrec;
begin
{$I-}
AssignFile(datei,'bc4-6.cd');
ReWrite(datei);
Write(datei,CDarray[2]); // <-- das leere zuerst!
Write(datei,CDarray[1]);
CloseFile(datei);
{$I+}
end;
Ergebnis: Null Fehler, Datei "bc4-6.cd" hat naturgemäß die doppelte Größe, weil ich beide Arrays gespeichert habe.
Und nun zum Einlesen der zuletzt gespeicherten Datei:
Code:
procedure TForm1.GetItClick(Sender: TObject);
var
datei : file of CDrec;
mycd : CDrec;
begin
{$I-}
AssignFile(datei,'bc4-6.cd');
Reset(datei);
while(not(eof(datei))) do
begin
Read(datei,mycd);
ShowMessage(mycd.name + #13#10 +
mycd.comment);
end;
CloseFile(datei);
{$I+}
end;
Beim ersten Mal wird logischerweise nichts zurückgeliefert, weil ich das leere Array ja auch gespeichert habe. Beim zweiten Durchlauf sollte aber der JSB erscheinen, und dann ist die Datei auch schon zu Ende.
Damit habe ich mal wieder meine Bürgerpflicht erfüllt und kann wohl ins Wochenende gehen? 8)
<-------------->
PS: Eins fehlt ja noch; das Ändern -
Also, ich habe als neue Datei "bc1-6.cd" mit allen drei CD-Records erzeugt:
Code:
{$I-}
AssignFile(datei,'bc1-6.cd');
ReWrite(datei);
Write(datei,CD);
Write(datei,CDarray[2]); // <-- das leere in der Mitte
Write(datei,CDarray[1]);
CloseFile(datei);
{$I+}
Und dann ergänze ich einfach mal den Titel #24 im ersten Record:
Code:
procedure TForm1.ChangeClick(Sender: TObject);
var
datei : file of CDrec;
mycd : CDrec;
fp : longint;
begin
{$I-}
AssignFile(datei,'bc1-6.cd');
Reset(datei);
while(not(eof(datei))) do
begin
// Position des aktuellen Feldes
fp := filepos(datei);
// Feld lesen
Read(datei,mycd);
if(CompareText('Brandenburg Concertos 1 - 3',mycd.name) = 0) then
begin
// eindeutige Copyright-Verletzung :o)
mycd.entry[24] := 'Mondschein-Sonate in C#m';
// zum Anfang des Feldes zurück
Seek(datei,fp);
// und schreiben
Write(datei,mycd);
end;
end;
CloseFile(datei);
{$I+}
end;
Jetzt is´ aber Schluss.
|