unit kennzeichen;
// {$mode objfpc}{$H+}
interface
uses
SysUtils,
Classes;
// , Graphics, Controls, Forms, Dialogs, ExtCtrls;
type
TDatensatz =
class
kennzeichen :
STRING;
// Öffentliche Variable, die das "kennzeichnen" ausgibt
Ort :
STRING;
// Öffentliche Variable, die den "ort" ausgibt
Bundesland :
STRING;
// Öffentliche Variable, die das "bundesland" ausgibt
Sonder :
STRING;
// Öffentliche Variable, die das "bundesland" ausgibt
constructor Create;
// Konstruktor von TDatensatz
destructor Destroy;
// Destruktor von TDatensatz
procedure Einlesen( DatenString :
STRING );
// Aufteilen von "datenstring" in "kennzeichen", "ort", "bundesland"
function IstKennzeichen( KennzeichenString :
STRING ) : BOOLEAN;
// Boolean'sche Funktion, ob "kennzeichenstring" == "kennzeichen"
end;
TListe =
class
public
Liste :
ARRAY [1 .. 600]
OF TDatensatz;
// riesiges Array der kompletten *.csv des Types "TDatensatz"
Anzahl : CARDINAL;
// Nr. der aktuellen Zeile in der *.csv
CompleteFile : TStringList;
// Ganzes File als TStringList
NotA : BOOLEAN;
// Sagt aus, ob Input verfügbar
constructor Create;
// Konstruktor von TListe
destructor Destroy;
override;
// Destruktor von TListe
procedure DateiEinlesen( datname, suchKFZ :
STRING );
// Einlesen und Verarbeiten der *.csv (LoadFileFrom, Erstellen von "liste")
function Lesen( i : CARDINAL; datnamen : TStringList ) : TDatensatz;
// Gibt einen result des Typen TDatensatz aus
function GibAnzahl : CARDINAL;
// Gibt Variable "anzahl" aus
// aber wozu? die Variable kann man doch direkt auslesen, wozu nochmals eine function dafür?
function NAcheck( j : INTEGER; Stringlist : TStringList ) : BOOLEAN;
end;
var
unsereListe : TListe;
implementation
constructor TDatensatz.Create;
begin
inherited;
// <-- fehlte
kennzeichen := '
';
Ort := '
';
Bundesland := '
';
Sonder := '
';
end;
destructor TDatensatz.Destroy;
begin
// überflüssig
// kennzeichen := '';
// Ort := '';
// Bundesland := '';
// Sonder := '';
inherited;
// <-- fehlte
end;
procedure TDatensatz.Einlesen( DatenString :
STRING );
begin
kennzeichen := Copy( DatenString, 1, pos( '
;', DatenString ) - 1 );
Delete( DatenString, 1, pos( '
;', DatenString ) );
Ort := Copy( DatenString, 1, pos( '
;', DatenString ) - 1 );
Delete( DatenString, 1, pos( '
;', DatenString ) );
Bundesland := DatenString;
end;
function TDatensatz.IstKennzeichen( KennzeichenString :
STRING ) : BOOLEAN;
begin
Result := false;
// <-- verschoben, da sonst immer False als Result
if KennzeichenString = kennzeichen
then
Result := true;
// result := false;
end;
constructor TListe.Create;
begin
inherited;
Anzahl := 0;
NotA := false;
CompleteFile := TStringList.Create;
// das muss hier hin
end;
destructor TListe.Destroy;
var
i : CARDINAL;
begin
if Anzahl > 0
then
begin
for i := 1
to Anzahl
do
Liste[i].Free;
// nicht Destroy direkt aufrufen
Anzahl := 0;
end;
NotA := false;
CompleteFile.Free;
// nicht Destroy direkt aufrufen
inherited;
// <-- fehlte
end;
procedure TListe.DateiEinlesen( datname, suchKFZ :
STRING );
begin
// try
datname := extractfilepath( ParamStr( 0 ) ) + '
lib\kfz.csv';
// Nein, da gibt es schon eine Instanz
// CompleteFile := TStringList.Create;
CompleteFile.LoadFromFile( datname );
if NAcheck( Anzahl, CompleteFile )
then
begin
Lesen( Anzahl, CompleteFile );
if not Liste[Anzahl].IstKennzeichen( suchKFZ )
then
begin
Anzahl := GibAnzahl + 1;
DateiEinlesen( datname, suchKFZ );
end
else
begin
if Lesen( Anzahl, CompleteFile ).Bundesland = '
'
then
begin
Liste[Anzahl].Sonder := Liste[Anzahl].Bundesland;
Liste[Anzahl].Bundesland := '
';
Liste[Anzahl].Ort := '
';
end;
end;
end;
// und diese Instanz bleibt
// finally
// CompleteFile.Free;
// end;
end;
function TListe.Lesen( i : CARDINAL; datnamen : TStringList ) : TDatensatz;
begin
Liste[i].Einlesen( datnamen.Strings[i] );
Result := Liste[i];
end;
function TListe.GibAnzahl : CARDINAL;
begin
Result := Anzahl;
end;
function TListe.NAcheck( j : INTEGER; Stringlist : TStringList ) : BOOLEAN;
begin
Result := false;
// <-- verschoben, da sonst immer False als Result
if j <= Stringlist.Count
then
Result := true;
NotA := true;
// Result := false;
end;
end.