Beoordelingen

Ascii (tekst) bestanden beheren vanuit code

Ascii (tekst) bestanden beheren vanuit code

Simpel gezegd, tekstbestanden bevatten leesbare ASCII-tekens. We kunnen denken aan het werken met een tekstbestand in Delphi als analoog aan het afspelen of opnemen van informatie op een videorecorder.

Hoewel het mogelijk is om een ​​tekstbestand te wijzigen, rond te springen bij het verwerken van informatie of wat gegevens aan het bestand toe te voegen anders dan aan het einde, is het raadzaam om een ​​tekstbestand alleen te gebruiken als we weten dat we met gewone tekst werken en dergelijke operaties zijn niet nodig.

Tekstbestanden worden beschouwd als een reeks tekens die zijn opgemaakt in lijnen, waarbij elke regel wordt beëindigd door een markering aan het einde van de regel (een combinatie van CR / LF).

Het TextFile en de Assign Method

Om te beginnen met het werken met tekstbestanden, moet u een bestand op een schijf koppelen aan een bestandsvariabele in uw code - declareer een variabele van het type TextFile en gebruik de AssignFile-procedure om een ​​bestand op een schijf te koppelen aan een bestandsvariabele.

var

SomeTxtFile: TextFile;

beginnen

AssignFile (SomeTxtFile, Bestandsnaam)

Informatie lezen uit een tekstbestand

Als we de inhoud van een bestand in een stringlijst willen teruglezen, volstaat slechts één regel code.

Memo1.Lines.LoadFromFile ( 'c: autoexec.bat')

Om informatie uit een bestand regel voor regel te kunnen lezen, moeten we het bestand openen voor invoer met behulp van de Reset procedure. Zodra een bestand opnieuw is ingesteld, kunnen we gebruiken readln om informatie uit een bestand te lezen (leest een regel tekst uit een bestand en gaat dan naar de volgende regel):

var

SomeTxtFile: TextFile;

buffer: draad;

beginnen

AssignFile (SomeTxtFile, 'c: autoexec.bat');

Reset (SomeTxtFile);

ReadLn (SomeTxtFile, buffer);

Memo1.Lines.Add (buffer);

CloseFile (SomeTxtFile);

einde;

Na het toevoegen van één regel tekst uit een bestand aan een memocomponent moet SomeTxtFile worden gesloten. Dit wordt gedaan door de Dichtbij trefwoord.

We kunnen de leesprocedure ook gebruiken om informatie uit een bestand te lezen. Read werkt net als ReadLn, behalve dat de aanwijzer niet naar de volgende regel wordt verplaatst.

var

SomeTxtFile: TextFile;

buf1, buf2: string5;

beginnen

AssignFile (SomeTxtFile, 'c: autoexec.bat');

Reset (SomeTxtFile);

ReadLn (SomeTxtFile, buf1, buf2);

ShowMessage (buf1 + "+ buf2);

CloseFile (SomeTxtFile);

einde;

EOF - Einde van bestand

Gebruik de EOF-functie om ervoor te zorgen dat u niet verder probeert te lezen dan het einde van het bestand. Laten we zeggen dat we de inhoud van het bestand in berichtvakken willen weergeven - regel voor regel totdat we aan het einde van een bestand komen:

var

SomeTxtFile: TextFile;

buffer: draad;

beginnen

AssignFile (SomeTxtFile, 'c: autoexec.bat');

Reset (SomeTxtFile);

  terwijl niet EOF (SomeTxtFile) beginnen

ReadLn (SomeTxtFile, buffer);

ShowMessage (buffer);

  einde;
CloseFile (SomeTxtFile);

einde;

Opmerking: het is beter om de While-lus te gebruiken dan de While-lus om rekening te houden met de (onwaarschijnlijke) mogelijkheid dat het bestand bestaat maar geen gegevens bevat.

Tekst naar een bestand schrijven

De writeln is waarschijnlijk de meest gebruikelijke manier om afzonderlijke stukjes informatie naar een bestand te sturen. De volgende code leest een tekst uit een Memo1-component (regel voor regel) en verzendt deze naar een nieuw gemaakt tekstbestand.

var

SomeTxtFile: TextFile;

j: geheel getal;

beginnen

AssignFile (SomeTxtFile, 'c: MyTextFile.txt');

Herschrijven (SomeTxtFile);

  voor j: = 0 naar (-1 + Memo1.Lines.Count) do

WriteLn (SomeTxtFile, Memo1.Linesj);

CloseFile (SomeTxtFile);

einde;

Afhankelijk van de status van het bestand dat aan de herschrijfprocedure wordt verstrekt, maakt het een nieuw bestand (opent het bestand voor uitvoer) met de naam toegewezen aan SomeTextFile. Als er al een bestand met dezelfde naam bestaat, wordt dit verwijderd en wordt er een nieuw leeg bestand gemaakt. Als SomeTextFile al is geopend, wordt het eerst gesloten en vervolgens opnieuw gemaakt. De huidige bestandspositie is ingesteld op het begin van het lege bestand.

Opmerking: Memo1.Lines.SaveToFile ('c: MyTextFile.txt') zal hetzelfde doen.

Soms moeten we alleen wat tekstgegevens toevoegen aan het einde van een bestaand bestand. Als dit het geval is, bellen we append om ervoor te zorgen dat een bestand wordt geopend met alleen-lezen toegang met de bestandsaanwijzer aan het einde van het bestand. Zoiets als:

var

SomeTxtFile: TextFile;

beginnen

AssignFile (SomeTxtFile, 'c: MyTextFile.txt');

Toevoegen (SomeTxtFile);

WriteLn (SomeTxtFile, 'Nieuwe regel in mijn tekstbestand');
CloseFile (SomeTxtFile);

einde;

Wees je bewust van uitzonderingen

Over het algemeen moet u altijd uitzonderingsverwerking gebruiken wanneer u met bestanden werkt. I / O zit vol verrassingen. Gebruik altijd CloseFile in een slotblok om te voorkomen dat de FAT van een gebruiker wordt beschadigd. Alle voorgaande voorbeelden moeten als volgt worden herschreven:

var

SomeTxtFile: TextFile;

buffer: string;

beginnen

AssignFile (SomeTxtFile, 'c: MyTextFile.txt');

  proberen

Reset (SomeTxtFile);

ReadLn (SomeTxtFile, buffer);

  Tenslotte

CloseFile (SomeTxtFile);

  einde;

einde;

Manipuleren met gestructureerde bestanden

Delphi kan zowel ASCII-bestanden als bestanden met binaire gegevens verwerken. Hier zijn de technieken voor het werken met getypte en ongetypeerde (binaire) bestanden.

Bekijk de video: Linux Tutorial for Beginners: Introduction to Linux Operating System (November 2020).