EMZETT.
Login

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

Kapitel 5 von 8 im Kurs Pascal. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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
  • TStringList verwaltet Texte, sortiert, trennt und speichert
  • Ausnahmen mit try ... except on e: Typ do und try ... finally
  • SysUtils, DateUtils, Math, Classes sind die wichtigsten Units

Übungsaufgabe

Lies eine Datei mit TStringList.LoadFromFile und gib die längste Zeile aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Units, Klassen und Objekte

Weiter: Lazarus, Delphi und Ökosystem

Alle Kapitel: Pascal im Überblick