Avatar billede runem74 Nybegynder
10. februar 2003 - 16:45 Der er 3 kommentarer og
2 løsninger

Append til file of record

Hej,

Er det muligt at appende en ny array of records til en file of records (De to records er af samme type). Jeg kunne forestille mig at det skulle værre muligt at flytte file pointeren til filens slutning også ellers bruge write som normalt. Er der nogen der har et lille eksemple?

Mange hilsner,

Rune
Avatar billede Slettet bruger
10. februar 2003 - 21:39 #1
Du kan gøre sådan

Assignfile(Fil,Navn);
Reset(Fil)
Seek(Fil, FileSize(Fil));
Tal:=0;
Repeat
Write(Fil,RecArray[Tal]);
Tal:=Tal+1;
Until Length(RecArray)=Tal


Eller vis du bruger et statisk array så kan du gåre sådan
Assignfile(Fil,Navn);
Reset(Fil)
Seek(Fil, FileSize(Fil));
Tal:=0;
BlockWrite(Fil,RecArray[Tal]);

Det krever dog at filen er oprettet som File og ikke som File Of

Mvh. Simon
Avatar billede Slettet bruger
10. februar 2003 - 21:45 #2
Fejl
I andet eksempel

Reset(Fil);
Skulle være
Reset(Fil,SizeOf(Rec));

BlockWrite(Fil,RecArray[Tal]);
skulle være
BlockWrite(Fil,RecArray[Tal],Length(RecArray));
Avatar billede hreiff Nybegynder
10. februar 2003 - 22:01 #3
Når du arbejder med random access files (sådan som du vil), kan man faktisk skrive til filen selvom den er åbnet med reset.
Et lille eksempel med en record (indeholdende en char).

Lav en tekstfil som indeholder 'abcdefg' og prøv at køre følgende:

type
  r= record
      c: char;
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
  f: file of r;
  size : Longint;
  S: string;
  y: integer;
  q: r;
begin
  if OpenDialog1.Execute then
  begin
    AssignFile(f, OpenDialog1.FileName);
    Reset(f);
    size := FileSize(f);
    S := 'File size in bytes: ' + IntToStr(size);
    y := 10;
    Canvas.TextOut(5, y, S);
    y := y + Canvas.TextHeight(S) + 5;
    S := 'Seeking halfway into file...';
    Canvas.TextOut(5, y, S);
    y := y + Canvas.TextHeight(S) + 5;

    Seek(f,size div 2);
    S := 'Position is now ' + IntToStr(FilePos(f));
    Canvas.TextOut(5, y, S);
    q.c := 'z';    {ændrer midterste tegn til z}
    write(f,q);

    seek (f, size); {finder slutningen af filen}
    q.c := 'w';
    write(f,q);  {tilføjer et w}
    CloseFile(f);
  end;
end;

Nu vil din fil indeholde: 'abczefgw' (altså midterste tegn ændret til z og et w tilføjet. Du kan naturligvis bruge filer med alle andre slags records. Det her er bare et eksempel.
Avatar billede runem74 Nybegynder
10. februar 2003 - 22:35 #4
Mange tak. Jeg fik eksemplerne til at virker med blot reset(fil) (Delphi 5).
Avatar billede runem74 Nybegynder
10. februar 2003 - 22:35 #5
virke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
22 min siden Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging