AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inifile Problem

Ein Thema von Maximum · begonnen am 4. Mär 2015 · letzter Beitrag vom 6. Mär 2015
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Inifile Problem

  Alt 6. Mär 2015, 11:37
p b d
ist doch egal, Hauptsache lesbar!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Maximum

Registriert seit: 4. Mär 2015
4 Beiträge
 
Delphi 5 Standard
 
#2

AW: Inifile Problem

  Alt 6. Mär 2015, 12:47
Hallo Leute,
Erstmal ein großes Danke an alle die sich mit meinem Problem beschäftigen und versuchen mir zu helfen!
Ich hab mir eure Antworten angekuckt und Vorschläge ausprobiert(Backslash bleibt vorerst, da ich wie schon gesagt erstmal erreichen will, dass es funktioniert).
Folgendes kam dabei raus:
Delphi-Quellcode:
unit ULoad2;

interface

uses SysUtils,StdCtrls, ExtCtrls,FileCtrl, Classes, Graphics, Controls, Forms,IniFiles, Dialogs;
type tladenbmi= array[1..365] of String;
     tladendate= array[1..365] of TDate;
function GetApplicationDirectory: string;
procedure loadfileb(n:string);

var
helpbmi:tladenbmi;
helpdate:tladendate;
test: string;
implementation

function GetApplicationDirectory: string;
begin
  GetApplicationDirectory := ExtractFilePath(ParamStr(0));
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
  begin
    helpdate[l]:=StrToDate(sl.Names[l]);
    helpbmi[l]:=sl.Values[DateToStr(helpdate[l])];
  end;
    test:= helpbmi[1];
  finally
   Ini.Free;
   sl.Free;
  end;
end;

end.
So nachdem ich nun test in einem Editfeld ausgebe bleibt dieses jedoch leer, verändert sich jedoch(Defaulttext:'Edit1'; nach Ausführung des Befehls:''; )
Ich weiß schonwieder echt nicht weiter. Ist mir echt peinlich, wie blöd ich mich anstell...

PS: Sorry das ich so unregelmäßig antworte, hab zur Zeit nicht viel Zeit.

Geändert von Maximum ( 6. Mär 2015 um 12:50 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Inifile Problem

  Alt 6. Mär 2015, 13:47
Ich vermute nach wie vor hier den zumindest ersten Fehler, zumal der TE bisher nicht weiter darauf einging, abgesehen von der richtigen Änderung zu "-Dir" statt "-Path" in diesem Fall:
Delphi-Quellcode:
  dir:=GetApplicationDirectory+n;
  Ini:=TIniFile.Create(dir+'\'+n+'.ini');
Mal in Prosa. GetApplicationDirectory() liefert vermutlich etwas dieser Art zurück:
C:\Projekte\MeinProgramm

Jetzt wird "n" dazu gepackt. Angenommen n = 'Hallo':
C:\Projekte\MeinProgrammHallo

Dann wird ein '\' und nochmals "n" sowie '.ini' drangehängt:
C:\Projekte\MeinProgrammHallo\Hallo.ini

SOLL DAS "HALLO" WIRKLICH AN DAS VERZEICHNIS GEPACKT WERDEN, TE!? Weil es wirkt auf mich so, als wäre das eine sehr seltsame Struktur.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Inifile Problem

  Alt 6. Mär 2015, 13:58
@Medium

Du nimmst falsch an, denn in dem Quelltext vom TE steht
Delphi-Quellcode:
function GetApplicationDirectory: string;
begin
  GetApplicationDirectory := ExtractFilePath(ParamStr(0));
end;
Also wird dort etwas in der Art zurückgeliefert
Code:
C:\Foo\Blup\App\
Jetzt wird dort der Name angehängt
Delphi-Quellcode:
  dir:=GetApplicationDirectory + n;
  Ini:=TIniFile.Create( dir + '\' + n + '.ini' );
und wir erhalten
Code:
n => 'bmifoo'

dir => 'C:\Foo\Blup\App\bmifoo'
inifile => 'C:\Foo\Blup\App\bmifoo\bmifoo.ini'
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Inifile Problem

  Alt 6. Mär 2015, 12:47
Ich habe die Unit jetzt mal ein wenig umgeschrieben, auch wenn die Struktur der Daten immer noch nicht optimal ist ... aber das ist ja auch ein anderes Thema.
Delphi-Quellcode:
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz