unit ULoad2;
interface
uses
SysUtils,
Classes,
IniFiles;
type
// ## INFO ##
//
// Zusammengehörende Informationen fassen wir auch zusammen
// tladen = array [1 .. 365] of Integer;
// tladend = array [1 .. 365] of TDate;
TTagesWert =
record
Datum: TDate;
Wert: Integer;
end;
TJahresWerte =
array of TTagesWert;
// ## INFO ##
//
// Statt irgendwelcher Magic Values, die überall im Code auftauchen
// benutzen wir Konstanten
const
PATH_SEPARATOR = '
\';
DATA_DIRECTORY_NAME = '
Data';
BMIFILE_EXTENSION = '
.ini';
BMIFILE_BMI_SECTIONNAME = '
BMI';
function GetApplicationDirectory:
string;
// ## INFO ##
//
// DRY - **D**on't **R**epeat **Y**ourself
//
// Niemals an irgendwelchen Stellen den gleichen Code mit der gleichen Bedeutung
// doppelt schreiben. Diese Teile werden ausgelagert und bekommen sprechende
// Namen.
function GetDataDirectory:
string;
function GetDataFileName(
const AName:
string ):
string;
// procedure loadfileb( n: string );
function LoadBmiFileData(
const AName:
string ): TJahresWerte;
procedure SaveBmiFileData(
const AName:
string; AData: TJahresWerte );
// ## INFO ##
//
// Globale Variablen müssen nicht sein und sind mehr BÖSE als nützlich
// var
// helpb: tladen;
// helpd: tladend;
// j: Integer;
implementation
function GetApplicationDirectory:
string;
begin
// ## INFO ##
//
// Wenn wir das Verzeichnis möchten, dann müssen wir uns auch das Verzeichnis
// holen und nicht den Pfad
// GetApplicationDirectory := ExtractFilePath( ParamStr( 0 ) );
GetApplicationDirectory := ExtractFileDir( ParamStr( 0 ) );
end;
function GetDataDirectory:
string;
begin
GetDataDirectory := GetApplicationDirectory + PATH_SEPARATOR + DATA_DIRECTORY_NAME;
end;
function GetDataFileName(
const AName:
string ):
string;
begin
GetDataFileName := GetDataDirectory + PATH_SEPARATOR + AName + BMIFILE_EXTENSION;
end;
// procedure loadfileb( n: string );
// var
// Ini: TIniFile;
// dir: string;
// sl: TStringList;
// l: Integer;
// begin
// dir := GetApplicationDirectory + n;
// sl := TStringList.Create;
// Ini := TIniFile.Create( dir + '\' + n + '.ini' ); // Datei in Stringliste laden
// try
// Ini.ReadSectionValues( 'BMI', sl );
// for l := 0 to sl.Count - 1 do
// helpd[l] := StrToDate( sl.Names[l] );
// for l := 0 to sl.Count - 1 do
// helpb[l] := Integer( sl.Objects[l] );
// j := Length( helpb );
// finally
// Ini.Free;
// sl.Free;
// end;
// end;
function LoadBmiFileData(
const AName:
string ): TJahresWerte;
var
LBmiFileName:
string;
LBmiFile: TIniFile;
LSectionNames: TStringList;
LIdx: Integer;
begin
LSectionNames :=
nil;
LBmiFile :=
nil;
try
LBmiFileName := GetDataFileName( AName );
LBmiFile := TIniFile.Create( LBmiFileName );
LBmiFile.ReadSection(
{Section} BMIFILE_BMI_SECTIONNAME,
{Strings} LSectionNames );
SetLength( Result, LSectionNames.Count );
for LIdx := 0
to LSectionNames.Count - 1
do
begin
Result[LIdx].Datum := StrToDate( LSectionNames[LIdx] );
Result[LIdx].Wert := LBmiFile.ReadInteger(
{Section} BMIFILE_BMI_SECTIONNAME,
{Ident} LSectionNames[LIdx],
{Default} 0 );
end;
finally
LSectionNames.Free;
LBmiFile.Free;
end;
end;
procedure SaveBmiFileData(
const AName:
string; AData: TJahresWerte );
var
LBmiFileName:
string;
LBmiFile: TIniFile;
LIdx: Integer;
begin
LBmiFile :=
nil;
try
LBmiFileName := GetDataFileName( AName );
LBmiFile := TIniFile.Create( LBmiFileName );
LBmiFile.EraseSection( BMIFILE_BMI_SECTIONNAME );
for LIdx := Low( AData )
to High( AData )
do
begin
LBmiFile.WriteInteger(
{Section} BMIFILE_BMI_SECTIONNAME,
{Ident} DateToStr( AData[LIdx].Datum ),
{Value} AData[LIdx].Wert );
end;
finally
LBmiFile.Free;
end;
end;
end.