Skapa en databas med hjälp av Delphis fil med typade filer

Enkelt uttryckt är en fil en binär sekvens av någon typ. I Delphi finns det tre filklasser: typ, text och otypad. Typade filer är filer som innehåller data av en viss typ, till exempel Dubbel, heltal eller tidigare definierad anpassad posttyp. Textfiler innehåller läsbara ASCII-tecken. Oinskrivna filer används när vi vill införa en minst möjlig struktur på en fil.

Typade filer

Medan textfiler består av rader som avslutas med en CR / LF (# 13 # 10) -kombination, skrivna filer består av data hämtade från en viss typ av datastruktur.

Till exempel skapar följande deklaration en posttyp som heter TMember och en matris med variabler för TMember-poster.

 typ

   TMember = spela in

     Namn : sträng[50];

    e-post:
sträng[30];

    Inlägg: LongInt;
  
slutet;

 
var Medlemmar: array[1… 50] av TMember; 

Innan vi kan skriva informationen till disken måste vi förklara en variabel av en filtyp. Följande kodrad förklarar en F-filvariabel.

 var F: fil av TMember; 

Obs: För att skapa en typfil i Delphi använder vi följande syntax:

var SomeTypedFile: fil av SomeType

Bastypen (SomeType) för en fil kan vara en skalartyp (som Dubbel), en arraytyp eller posttyp. Det bör inte vara en lång sträng, dynamisk matris, klass, objekt eller en pekare.

För att börja arbeta med filer från Delphi, måste vi länka en fil på en disk till en filvariabel i vårt program. För att skapa den här länken måste vi använda AssignFile procedur för att associera en fil på en disk med en filvariabel.

 AssignFile (F, 'Members.dat') 

När kopplingen till en extern fil har upprättats måste filvariabeln F 'öppnas' för att förbereda den för läsning och skrivning. Vi kallar Återställ procedur för att öppna en befintlig fil eller Omskriva för att skapa en ny fil. När ett program slutför behandlingen av en fil måste filen stängas med hjälp av proceduren CloseFile. När en fil är stängd uppdateras den externa filen. Filvariabeln kan sedan associeras med en annan extern fil.

I allmänhet bör vi alltid använda undantagshantering; många fel kan uppstå när du arbetar med filer. Till exempel: om vi kallar CloseFile för en fil som redan är stängd rapporterar Delphi ett I / O-fel. Å andra sidan, om vi försöker stänga en fil men ännu inte har kallat AssignFile, är resultaten oförutsägbara.

Skriv till en fil

Anta att vi har fyllt en rad Delphi-medlemmar med deras namn, e-post och antal inlägg och vi vill lagra denna information i en fil på disken. Följande kod kommer att göra jobbet:

 var

   F: fil av TMember;

  i: heltal;
Börja

  AssignFile (F, 'members.dat');

  Omskriva (F);

  Prova

   för j: = 1 till 50 do

    Skriv (F, Medlemmar [j]);

  till sist

   CloseFile (F);

  slutet;slutet; 

Läs från en fil

För att hämta all information från filen 'members.dat' använder vi följande kod:

 var

   Medlem: TMember

   F: fil av TMember;Börja

  AssignFile (F, 'members.dat');

  Återställ (F);

  Prova

   Medan inte Eof (F) börjar

    Läs (F, medlem);

    DoSomethingWithMember;

   slutet;

 
till sist

   CloseFile (F);

  slutet;slutet; 

Notera: Eof är EndOfFile-kontrollfunktionen. Vi använder denna funktion för att se till att vi inte försöker läsa bortom filens slut (utöver den senast lagrade posten).

Söker och positionerar

Filer öppnas normalt i tur och ordning. När en fil läses med standardproceduren Läs eller skrivs med standardproceduren Skriv flyttas den aktuella filpositionen till nästa numeriskt ordnade filkomponent (nästa post). Typade filer kan också nås slumpmässigt genom standardproceduren Sök, som flyttar den aktuella filpositionen till en specificerad komponent. De FilePos och Filstorlek funktioner kan användas för att bestämma den aktuella filpositionen och den aktuella filstorleken.

 gå tillbaka till början - den första posten

 Söka (F, 0);

 

 gå till 5: e posten

 Söka (F, 5);

 

 Hoppa till slutet - "efter" den sista posten

 Söka (F, FileSize (F)); 

Ändra och uppdatera

Du har precis lärt dig hur du skriver och läser hela gruppen med medlemmar, men vad händer om allt du vill göra är att söka till den 10: e medlemmen och ändra e-postmeddelandet? Nästa procedur gör exakt det:

 procedur Byta e-mail(const RecN: heltal; const Ny E-post : sträng);var DummyMember: TMember;Börja

  tilldela, öppna, undantagshanteringsblock

  Söka (F, RecN);

  Läs (F, DummyMember);

  DummyMember.Email: = NewEMail;

  läs flyttar till nästa post, vi måste

 gå tillbaka till den ursprungliga posten och skriv sedan
  Söka (F, RecN);

  Skriv (F, DummyMember);

  stäng filslutet;

Avsluta uppgiften

Det är det - nu har du allt du behöver för att utföra din uppgift. Du kan skriva medlemmarnas information till disken, du kan läsa den tillbaka och du kan till och med ändra data (till exempel e-post) i "mitt" i filen.

Vad som är viktigt är att den här filen inte är en ASCII-fil, så ser den ut i Notepad (endast en post):

 .Delphi Guide g Ò5 · ¿ì. 5 ... B V.Lƒ, „¨[email protected]Ï… ç.ç.ï ...