Kurz: AssignFile(f, pfad); Reset(f); n := 0; while not Eof(f) do begin ReadLn(f, zeile); Inc(n); writeln(n, ’: ’, zeile); end; CloseFile(f);
Teil des Kurses Pascal
Textdateien
program Dateien;
{$mode objfpc}{$H+}
uses SysUtils;
var
f: TextFile;
zeile: String;
pfad: String;
n: Integer;
begin
pfad := GetTempDir + 'pascal-demo.txt';
AssignFile(f, pfad);
Rewrite(f);
writeln(f, 'eins');
writeln(f, 'zwei');
writeln(f, 'drei ', 42);
CloseFile(f);
AssignFile(f, pfad);
Reset(f);
n := 0;
while not Eof(f) do
begin
ReadLn(f, zeile);
Inc(n);
writeln(n, ': ', zeile);
end;
CloseFile(f);
AssignFile(f, pfad);
Append(f);
writeln(f, 'vier');
CloseFile(f);
writeln(FileExists(pfad));
DeleteFile(pfad);
writeln(FileExists(pfad));
end.Ausgabe:
1: eins
2: zwei
3: drei 42
TRUE
FALSEStreams und Stringlisten
program Listen;
{$mode objfpc}{$H+}
uses Classes, SysUtils;
var
l: TStringList;
i: Integer;
begin
l := TStringList.Create;
try
l.Add('Banane');
l.Add('Apfel');
l.Add('Kirsche');
l.Sort;
for i := 0 to l.Count - 1 do write(l[i], ' ');
writeln;
writeln(l.IndexOf('Apfel'), ' ', l.Text = '');
l.Delimiter := ';';
l.StrictDelimiter := True;
writeln(l.DelimitedText);
l.DelimitedText := 'x;y;z';
writeln(l.Count, ' ', l[1]);
l.Values['name'] := 'Mia';
l.Values['alter'] := '17';
writeln(l.Values['name'], ' ', l.Count);
finally
l.Free;
end;
end.Ausgabe:
Apfel Banane Kirsche
0 FALSE
Apfel;Banane;Kirsche
3 y
Mia 5Ausnahmen im Detail
program Fehler;
{$mode objfpc}{$H+}
uses SysUtils;
type
EEigen = class(Exception)
Code: Integer;
constructor Create(ACode: Integer);
end;
constructor EEigen.Create(ACode: Integer);
begin
inherited CreateFmt('Eigener Fehler Nr. %d', [ACode]);
Code := ACode;
end;
var
x, y: Integer;
begin
try
x := 0;
y := 10 div x;
except
on e: EDivByZero do writeln('Division durch null');
end;
try
x := StrToInt('abc');
except
on e: EConvertError do writeln('Konvertierung: ', e.Message);
end;
try
raise EEigen.Create(42);
except
on e: EEigen do writeln(e.Message, ' / Code ', e.Code);
on e: Exception do writeln('anderer Fehler');
end;
try
try
raise Exception.Create('innen');
finally
writeln('finally läuft immer');
end;
except
on e: Exception do writeln('außen gefangen: ', e.Message);
end;
end.Ausgabe:
Division durch null
Konvertierung: "abc" is an invalid integer
Eigener Fehler Nr. 42 / Code 42
finally läuft immer
außen gefangen: innenDatum, Zeit und Mathematik
program Zeit;
{$mode objfpc}{$H+}
uses SysUtils, DateUtils, Math;
var
d: TDateTime;
begin
d := EncodeDate(2024, 3, 15) + EncodeTime(14, 30, 0, 0);
writeln(FormatDateTime('dd.mm.yyyy hh:nn', d));
writeln(DayOfWeek(d), ' ', YearOf(d), ' ', MonthOf(d), ' ', DayOf(d));
writeln(FormatDateTime('yyyy-mm-dd', IncDay(d, 30)));
writeln(DaysBetween(EncodeDate(2024, 1, 1), EncodeDate(2024, 12, 31)));
writeln(IsLeapYear(2024), ' ', IsLeapYear(2023));
writeln(Ceil(2.1), ' ', Floor(-2.1), ' ', RoundTo(3.14159, -2):0:2);
writeln(Min(3, 9), ' ', Max(3, 9), ' ', Sum([1.5, 2.5]):0:1);
writeln(IntPower(2, 10), ' ', Power(2, 0.5):0:4);
writeln(Hypot(3, 4):0:1, ' ', Log10(1000):0:1);
end.Ausgabe:
15.03.2024 14:30
6 2024 3 15
2024-04-14
365
TRUE FALSE
3 -3 3.14
3 9 4.0
1.02400000000000000000E+0003 1.4142
5.0 3.0Merke
- Dateien:
AssignFile,Reset/Rewrite/Append,ReadLn/WriteLn,CloseFile TStringListverwaltet Texte, sortiert, trennt und speichert- Ausnahmen mit
try ... except on e: Typ doundtry ... finally SysUtils,DateUtils,Math,Classessind die wichtigsten Units
Übungsaufgabe
Lies eine Datei mit TStringList.LoadFromFile und gib die längste Zeile aus.
Quiz zur Selbstkontrolle
Was bewirkt finally?
- Der Block läuft immer, auch bei Fehlern (richtig)
- Der Block läuft nur bei Fehlern
- Der Block läuft nie
- Der Block beendet das Programm
Welche Unit enthält TStringList?
- Classes (richtig)
- System
- Math
- Graphics
Wie öffnet man eine Datei zum Anhängen?
- Append(f) (richtig)
- Reset(f)
- Open(f, ‘a’)
- Create(f)
Weiter im Kurs
Zurück: Units, Klassen und Objekte
Weiter: Lazarus, Delphi und Ökosystem
Alle Kapitel: Pascal im Überblick