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 FALSE
Streams 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 5
Ausnahmen 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: innen
Datum, 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.0
Merke
- 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
Aufgabe
Lies eine Datei mit TStringList.LoadFromFile und gib die längste Zeile aus.