Simpel gezegd, een bestand is een binaire reeks van een bepaald type. In Delphi zijn er drie bestandsklassen: getypt, tekst en ongetypeerd. Getypte bestanden zijn bestanden die gegevens van een bepaald type bevatten, zoals Double, Integer of eerder gedefinieerd aangepast recordtype. Tekstbestanden bevatten leesbare ASCII-tekens. Untyped-bestanden worden gebruikt wanneer we een zo min mogelijk structuur aan een bestand willen opleggen.
Terwijl tekstbestanden bestaan uit regels die worden afgesloten met een CR / LF (# 13 # 10) -combinatie, getypte bestanden bestaan uit gegevens afkomstig van een bepaald type gegevensstructuur.
De volgende verklaring maakt bijvoorbeeld een recordtype met de naam TMember en een array van TMember-recordvariabelen.
type
TMember = Vermelding
Naam : draad[50];
draad[30];
einde;
var Leden: rangschikking[1… 50] van TMember;
Voordat we de informatie naar de schijf kunnen schrijven, moeten we een variabele van een bestandstype declareren. De volgende coderegel geeft een F-bestandsvariabele aan.
var F: bestand van TMember;
Opmerking: om een getypt bestand in Delphi te maken, gebruiken we de volgende syntaxis:
var SomeTypedFile: bestand van sometype
Het basistype (SomeType) voor een bestand kan een scalair type (zoals Double), een arraytype of recordtype zijn. Het mag geen lange reeks, dynamische array, klasse, object of aanwijzer zijn.
Om met bestanden van Delphi te kunnen werken, moeten we een bestand op een schijf koppelen aan een bestandsvariabele in ons programma. Om deze link te maken, moeten we gebruiken AssignFile procedure om een bestand op een schijf te koppelen aan een bestandsvariabele.
AssignFile (F, 'Members.dat')
Zodra de associatie met een extern bestand tot stand is gebracht, moet de bestandsvariabele F worden 'geopend' om deze voor te bereiden op lezen en schrijven. We roepen de reset-procedure aan om een bestaand bestand te openen of herschrijven om een nieuw bestand te maken. Wanneer een programma de verwerking van een bestand heeft voltooid, moet het bestand worden gesloten met de CloseFile-procedure. Nadat een bestand is gesloten, wordt het bijbehorende externe bestand bijgewerkt. De bestandsvariabele kan vervolgens worden gekoppeld aan een ander extern bestand.
Over het algemeen moeten we altijd omgaan met uitzonderingen; er kunnen veel fouten optreden bij het werken met bestanden. Bijvoorbeeld: als we CloseFile aanroepen voor een bestand dat al is gesloten, meldt Delphi een I / O-fout. Aan de andere kant, als we proberen een bestand te sluiten maar nog geen AssignFile hebben genoemd, zijn de resultaten onvoorspelbaar.
Stel dat we een reeks Delphi-leden hebben gevuld met hun namen, e-mails en aantal berichten en we willen deze informatie opslaan in een bestand op de schijf. Het volgende stuk code zal het werk doen:
var
F: bestand van TMember;
beginnen
AssignFile (F, 'members.dat');
Herschrijven (F);
proberen
voor j: = 1 naar 50 Doen
Write (F, Members [j]);
Tenslotte
Sluitbestand (F);
einde;einde;
Om alle informatie uit het bestand 'members.dat' op te halen, gebruiken we de volgende code:
var
Lid: TMember
F: bestand van TMember;beginnen
AssignFile (F, 'members.dat');
Reset (F);
proberen
terwijl niet Eof (F) beginnen
Lezen (F, lid);
DoSomethingWithMember;
einde;
Tenslotte
Sluitbestand (F);
einde;einde;
Notitie: Eof is de EndOfFile-controlefunctie. We gebruiken deze functie om ervoor te zorgen dat we niet proberen verder te lezen dan het einde van het bestand (voorbij het laatst opgeslagen record).
Bestanden worden normaal achtereenvolgens geopend. Wanneer een bestand wordt gelezen met de standaardprocedure Lezen of geschreven met de standaardprocedure Schrijven, wordt de huidige bestandspositie verplaatst naar het volgende numeriek geordende bestandsonderdeel (volgende record). Getypte bestanden zijn ook willekeurig toegankelijk via de standaardprocedure Zoeken, die de huidige bestandspositie naar een opgegeven component verplaatst. De FilePos en Bestandsgrootte functies kunnen worden gebruikt om de huidige bestandspositie en de huidige bestandsgrootte te bepalen.
ga terug naar het begin - het eerste record
Zoeken (F, 0);
ga naar het 5e record
Zoeken (F, 5);
Spring naar het einde - "na" het laatste record
Zoeken (F, FileSize (F));
Je hebt net geleerd hoe je de hele reeks leden moet schrijven en lezen, maar wat als je alleen maar naar het 10e lid wilt zoeken en de e-mail wilt wijzigen? De volgende procedure doet precies dat:
procedure ChangeEMail (const RecN: geheel getal; const Nieuwe e-mail : draad);var DummyMember: TMember;beginnen
toewijzen, openen, uitzonderingsafhandelingsblok
Zoeken (F, RecN);
Lezen (F, DummyMember);
DummyMember.Email: = NewEMail;
lees bewegingen naar het volgende record, we moeten
Zoeken (F, RecN);
Write (F, DummyMember);
bestand sluiteneinde;
Dat is alles - nu heb je alles wat je nodig hebt om je taak te volbrengen. U kunt ledeninformatie naar de schijf schrijven, u kunt deze teruglezen, en u kunt zelfs sommige gegevens (bijvoorbeeld e-mail) in het "midden" van het bestand wijzigen.
Wat belangrijk is, is dat dit bestand geen ASCII-bestand is, zo ziet het eruit in Kladblok (slechts één record):
.Delphi Guide g Ò5 · ¿ì. 5… B V.Lƒ, „¨[email protected]Ï… ç.ç.ï…