Lazarus/Dateien: Unterschied zwischen den Versionen
main>Peterdauscher Keine Bearbeitungszusammenfassung |
(formatiert) Markierung: 2017-Quelltext-Bearbeitung |
||
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Allgemeines zu Dateien == | == Allgemeines zu Dateien == | ||
Zeile 5: | Zeile 4: | ||
== Lesen von Schreiben von Daten in Dateien == | == Lesen von Schreiben von Daten in Dateien == | ||
Wir betrachten nun, wie Programme selbst Dateien erstellen, Daten hineinschreiben und Daten herauslesen können. Wir beschränken uns dabei hier auf reine Text-Dateien, also Dateien, in denen die Daten auch in menschenlesbarer Form abgelegt sind. | |||
Um Textdateien manipulieren zu können, gibt es einen neuen Variablentyp <tt>TextFile</tt>. Die folgenden Befehle sind hierfür verfügbar: | |||
{| class ="wikitable toptextcells" | |||
! Befehl | |||
! Bedeutung | |||
|- | |||
| AssignFile(Datei,Dateiname)|| Verbindet die <tt>Datei</tt> vom Typ <tt>TextFile</tt> mit der Datei mit dem angegebenen <tt>Dateinamen</tt>. | |||
|- | |||
| Rewrite(Datei)|| Öffnet die Datei zum (Über-)Schreiben. Die bisher enthaltenen Daten werden gelöscht. | |||
|- | |||
| Reset(Datei)|| Öffnet die Datei zum Lesen. | |||
|- | |||
| Append(Datei)|| Öffnet die Datei zum Anhängen zusätzlicher Daten | |||
|- | |||
| EOF(Datei) || Diese Funktion (Abkürzung für "End of File") liefert <tt>true</tt>, wenn das Ende der Datei erreicht ist, wenn also keine weiteren Daten mehr kommen. | |||
|- | |||
| Readln(Datei,Variable)|| Liest eine Variable (String, Integer, Double) aus der Datei aus. | |||
|- | |||
| Writeln(Datei,Variable)|| Schreibt eine Variable (String, Integer, Double) in die Datei. | |||
|- | |||
| CloseFile(Datei)|| Schließt die Datei. <br> Am Ende des Programms oder der Dateimanipulation nicht vergessen, sonst können Daten verloren gehen. | |||
|- | |||
|} | |||
<source line lang="pascal"> | |||
unit Dateitest_main; | |||
{$mode objfpc}{$H+} | |||
interface | |||
uses | |||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; | |||
type | |||
{ TForm1 } | |||
TForm1 = class(TForm) | |||
Button1: TButton; | |||
Button2: TButton; | |||
Button3: TButton; | |||
Memo1: TMemo; | |||
procedure Button1Click(Sender: TObject); | |||
procedure Button2Click(Sender: TObject); | |||
procedure Button3Click(Sender: TObject); | |||
private | |||
{ private declarations } | |||
public | |||
{ public declarations } | |||
end; | |||
var | |||
Form1: TForm1; | |||
Datei : TextFile; | |||
s : string; | |||
implementation | |||
{$R *.lfm} | |||
{ TForm1 } | |||
procedure TForm1.Button1Click(Sender: TObject); | |||
begin | |||
AssignFile(Datei,'MeineDatei.txt'); | |||
Rewrite(Datei); | |||
writeln(Datei,'Hallo'); | |||
writeln(Datei,'Welt'); | |||
CloseFile(Datei); | |||
end; | |||
procedure TForm1.Button2Click(Sender: TObject); | |||
begin | |||
AssignFile(Datei,'MeineDatei.txt'); | |||
Append(Datei); | |||
writeln(Datei,'Hallo'); | |||
writeln(Datei,'Welt'); | |||
CloseFile(Datei); | |||
end; | |||
procedure TForm1.Button3Click(Sender: TObject); | |||
begin | |||
AssignFile(Datei,'MeineDatei.txt'); | |||
Reset(Datei); | |||
Memo1.Lines.Clear; | |||
while not eof(Datei) | |||
do begin | |||
readln(Datei,s); | |||
Memo1.Lines.Add(s); | |||
end; | |||
CloseFile(Datei); | |||
end; | |||
end. | |||
</source> | |||
== Manipulation von Dateien und Ordnern als Ganzes == | == Manipulation von Dateien und Ordnern als Ganzes == | ||
Für alle folgenden Befehle muss die Unit <tt>sysutils</tt> in der<tt> uses ...</tt>-Klasel eingebunden werden, was standardmäßig auch der Fall ist. Näheres zu dieser Unit, die noch sehr viele andere nützliche Befehle enthält, findet sich auf den Dokumentationsseiten zu [http://lazarus-ccr.sourceforge.net/docs/rtl/sysutils/ systutils] des Lazarus-Projekts. | |||
Zeile 74: | Zeile 174: | ||
|- | |- | ||
|} | |} | ||
{{Lazarus-Buch}} |
Aktuelle Version vom 10. August 2019, 06:25 Uhr
Allgemeines zu Dateien
Während ein Programm läuft, kann man die notwendigen Daten in Variablen des Programms speichern -- wenn es allzu viele sind. Was aber wird aus den Daten, wenn man das Programm beendet. In der Regel sind diese Daten danach verloren, wenn man nicht dafür sorgt, dass sie erhalten bleiben. Eine Möglichkeiten zum dauerhaften Speichern von Daten (über die Laufzeit des Programms hinaus) sind Dateien. Jeder von uns kennt etwa Dateien aus der Textverarbeitung. Und natürlich auch vom Programmieren selbst.
Lesen von Schreiben von Daten in Dateien
Wir betrachten nun, wie Programme selbst Dateien erstellen, Daten hineinschreiben und Daten herauslesen können. Wir beschränken uns dabei hier auf reine Text-Dateien, also Dateien, in denen die Daten auch in menschenlesbarer Form abgelegt sind.
Um Textdateien manipulieren zu können, gibt es einen neuen Variablentyp TextFile. Die folgenden Befehle sind hierfür verfügbar:
Befehl | Bedeutung |
---|---|
AssignFile(Datei,Dateiname) | Verbindet die Datei vom Typ TextFile mit der Datei mit dem angegebenen Dateinamen. |
Rewrite(Datei) | Öffnet die Datei zum (Über-)Schreiben. Die bisher enthaltenen Daten werden gelöscht. |
Reset(Datei) | Öffnet die Datei zum Lesen. |
Append(Datei) | Öffnet die Datei zum Anhängen zusätzlicher Daten |
EOF(Datei) | Diese Funktion (Abkürzung für "End of File") liefert true, wenn das Ende der Datei erreicht ist, wenn also keine weiteren Daten mehr kommen. |
Readln(Datei,Variable) | Liest eine Variable (String, Integer, Double) aus der Datei aus. |
Writeln(Datei,Variable) | Schreibt eine Variable (String, Integer, Double) in die Datei. |
CloseFile(Datei) | Schließt die Datei. Am Ende des Programms oder der Dateimanipulation nicht vergessen, sonst können Daten verloren gehen. |
unit Dateitest_main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
Datei : TextFile;
s : string;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(Datei,'MeineDatei.txt');
Rewrite(Datei);
writeln(Datei,'Hallo');
writeln(Datei,'Welt');
CloseFile(Datei);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AssignFile(Datei,'MeineDatei.txt');
Append(Datei);
writeln(Datei,'Hallo');
writeln(Datei,'Welt');
CloseFile(Datei);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
AssignFile(Datei,'MeineDatei.txt');
Reset(Datei);
Memo1.Lines.Clear;
while not eof(Datei)
do begin
readln(Datei,s);
Memo1.Lines.Add(s);
end;
CloseFile(Datei);
end;
end.
Manipulation von Dateien und Ordnern als Ganzes
Für alle folgenden Befehle muss die Unit sysutils in der uses ...-Klasel eingebunden werden, was standardmäßig auch der Fall ist. Näheres zu dieser Unit, die noch sehr viele andere nützliche Befehle enthält, findet sich auf den Dokumentationsseiten zu systutils des Lazarus-Projekts.
Löschen, Umbenennen und Erzeugen von Dateien
Ist erst einmal eine Datei erstellt, so kann es sein, dass sie irgendwann nicht mehr gebraucht wird und daher gelöscht werden soll. Oder aber der Name der Datei soll geändert werden. Hierzu kann man die folgenden beiden Befehle verwenden:
Befehl | Bedeutung |
---|---|
DeleteFile(Dateiname : String) : Boolean | Löscht die Datei mit dem gegebenen Dateiname. Liefert "false" zurück, wenn die Datei nicht gelöscht werden kann. |
RenameFile(AlterName, NeuerName : String) : Boolean | Benennt eine Datei um. Liefert "false" zurück, wenn die Datei nicht umbenannt werden kann. |
Löschen, Umbenennen und Erzeugen von Ordnern
Befehl | Bedeutung |
---|---|
RemoveDir(Ordnername : String) : Boolean | Löscht den angegebenen Ordner. Liefert "false" zurück, wenn der Ordner nicht gelöscht werden kann. |
RenameFile(Ordnername : String) : Boolean | Benennt den angegebenen Ordner um. Liefert "false" zurück, wenn der Ordner nicht umbenannt werden kann. |
ForceDirectories(Pfadname : String) : Boolean | Erzeugt den gesamten angegebenen Pfad. Liefert "false" zurück, wenn das nicht möglich ist. |
Überprüfen der Existenz von Dateien und Ordnern
Befehl | Bedeutung |
---|---|
FileExists(Dateiname : String) : Boolean | Liefert "true" zurück, wenn die Datei mit dem angegebenen Namen existiert. |
DirectoryExists(Ordnername: String) : Boolean | Liefert "true" zurück, wenn der Ordner mit dem angegebenen Namen existiert. |
Dateinamen und Pfade
In Microsoft-Windows besteht ein (vollständiger) Dateiname wie C:\Programme\lazarus\bin\lazarus.exe aus verschiedenen Bestandteilen:
- Dem Laufwerk (C)
- Dem Dateipfad (C:\Programme\lazarus\bin\)
bzw. dem Dateiordner (C:\Programme\lazarus\bin) - Dem eigentlichen Dateimnamen (lazarus.exe)
- Der Dateiendung (exe)
Befehl | Bedeutung |
---|---|
ExtractFileDrive(vollst_Dateiname : String) : String | Liefert das Laufwerk zurück |
ExtractFilePath(vollst_Dateiname : String) : String | Liefert den Dateipfad zurück |
ExtractFileDir(vollst_Dateiname : String) : String | Liefert den Dateiordner zurück |
ExtractFileName(vollst_Dateiname : String) : String | Liefert den eigentlichen Dateinamen zurück |
ExtractFileExt(vollst_Dateiname : String) : String | Liefert die Endung zurück |
- Einführung
- Technisches
- Komponenten, Eigenschaften, Ereignisse
- Computer-Mathematik
- Verzweigungen
- Spielen mit dem Zufall
- Schleifen
- Computer-Graphik
- Geschachtelte Verzweigungen und Verzweigungen in Schleifen
- Prozeduren, Funktionen und Bibliotheken
- Felder (Arrays)
- Zeichen (Char) und Zeichenkette (String)
- Dateien
- Graphische Komponenten