Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Inifile Problem (https://www.delphipraxis.net/184172-inifile-problem.html)

Maximum 4. Mär 2015 21:39

Inifile Problem
 
N'Abend alle zusammen,
ich hab nen Problem mit meiner Prozedure, ich will mit ihr die Werte und Schlüssel einer bestimmten Sektion auslesen, leider scheint das nicht so ganz zu funktionieren, da er bei der Ausgabe des Arrays nichts angibt und beim zählen der Strings "0" ausgibt...
Ich hoffe echt ihr könnt mir helfen, sitz schon ne Weile an dem Problem und bin zu blöd den Fehler zu finden ^^'
Code:
unit ULoad2;

interface

uses SysUtils,StdCtrls, ExtCtrls,FileCtrl, Classes, Graphics, Controls, Forms,IniFiles, Dialogs;
type tladen= array[1..365] of Integer;
     tladend= array[1..365] of TDate;
function GetApplicationDirectory: string;
function loadfileb(n:string; i:TDate):tladen;

var
helpb:tladen;
helpd:tladend;
h: integer;
implementation

function GetApplicationDirectory: string;
begin
  GetApplicationDirectory := ExtractFilePath(ParamStr(0));
end;

function loadfileb(n:string; i:TDate):tladen;
var Ini: TIniFile;
  dir, help, d,B,K,U:string;
  sl,helpf : TStringList;
  j,zaehler,l: integer;
begin
  dir:=GetApplicationDirectory+n;
  sl:=TStringlist.Create;
  helpf:=TStringlist.Create;
  try
    Ini:=TIniFile.Create(dir+n+'.ini'); //Datei in Stringliste laden
    ini.ReadSectionValues('BMI', sl);
    j:= sl.Count;
    Ini.ReadSectionValues('BMI', helpf);
    h:=helpf.Count;
  finally
   Ini.Free;
   sl.Free;
  end;
end;

end.
MfG Maximum

Dalai 4. Mär 2015 21:51

AW: Inifile Problem
 
Zitat:

Zitat von Maximum (Beitrag 1292377)
[...] da er bei der Ausgabe des Arrays nichts angibt

Bei der Ausgabe welches Arrays?

Zitat:

[...] und beim zählen der Strings "0" ausgibt...
Ich nehme an, damit meinst du helpf.Count? Bist du mal mit F7 durch die Funktion gesteppt und hast dir angeschaut, welche Werte deine Variablen so haben? Was wird überhaupt in die Funktion reingegeben als Parameter?

Noch ein paar andere Dinge:
  • Vermeide globale Variablen
  • Funktionen haben Rückgabewerte. Soll eine Funktion nichts zurückgeben, sollte man stattdessen eine procedure daraus machen (der Compiler dürfte übrigens darauf hingewiesen haben mit "Der Rückgabewert von Funktion loadfileb könnte undefiniert sein")
  • Deine Variable helpf wird zwar erzeugt, aber nicht wieder zerstört -> Speicherleck.

MfG Dalai

Luckie 4. Mär 2015 23:31

AW: Inifile Problem
 
j und h werden auch nicht benutzt. Warum die Zuweisung, wenn du sie doch nicht benutzt?

Der Compiler sollte dir ein paar Warnungen um die Ohren hauen.

Maximum 5. Mär 2015 04:43

AW: Inifile Problem
 
Vielen Dank für die schnellen Antworten und dafür das ihr euch die Zeit nehmt mir zu helfen :)

Zitat:

Bei der Ausgabe welches Arrays?
Bei der Ausgabe von helpf, diese fand in einer anderen Unit statt, hab die Unit seitdem schon ein paar mal umgeschrieben um zu kucken woran es liegen könnte, weshalb das nicht mehr zu erkennen ist :oops:

Zitat:

Ich nehme an, damit meinst du helpf.Count? Bist du mal mit F7 durch die Funktion gesteppt und hast dir angeschaut, welche Werte deine Variablen so haben?
Um ehrlich zu sein, wusst ich bisher noch nichtmal, dass das geht :oops: bin noch nicht so geübt im umgang mit Delphi...

Zitat:

Was wird überhaupt in die Funktion reingegeben als Parameter?
Ähm n ist ein Name, der wird gebraucht um auf das Verzeichnis der Datei zuzugreifen, da es sich um mehrere Inidateien handelt, welche jeweils in einen bestimmten Ordner gespeichert werden. Und i ist das Datum, was eigendlich auch schonwieder überflüssig ist, aufgrund von überarbeitungen meinerseits :oops:

Zitat:

j und h werden auch nicht benutzt. Warum die Zuweisung, wenn du sie doch nicht benutzt?
j und h werden in einer anderen Unit aufgerufen, weshalb ich sie auch global deklariert habe.

baumina 5. Mär 2015 06:36

AW: Inifile Problem
 
Du füllst deine Arrays nirgends, deswegen sind diese leer. Du füllst nur 2 Stringlisten und diese müssten Inhalt haben, allerdings nur innerhalb der Funktion loadfileb, da diese Variablen dort lokal sind.

p80286 5. Mär 2015 10:24

AW: Inifile Problem
 
Zitat:

Zitat von Maximum (Beitrag 1292385)

Zitat:

j und h werden auch nicht benutzt. Warum die Zuweisung, wenn du sie doch nicht benutzt?
j und h werden in einer anderen Unit aufgerufen, weshalb ich sie auch global deklariert habe.

das gewöhn dir bitte ganz schnell ab. Zum einen sind die Namen so aussagekräftig daß man immer einen Kontext benötigt um zu wissen wofür sie gut sind, zum anderen gibt es nur ganz ganz.......ganz selten den Fall, daß innerhalb einer Funktion/Prozedur eine externe Variable benötigt wird. Wenn Du über die "offizelle" Schnittstelle (Parameter) die Daten übergibst, dann weißt Du innerhalb der Prozedur/Funktion eigentlich immer was Sache ist, und Du mußt nicht auf irgendwelche Nebeneffekte Rücksicht nehmen.

Gruß
K-H

himitsu 5. Mär 2015 10:36

AW: Inifile Problem
 
Außerdem steht in j und h genau das Selbe drin.
Nur weil es sinnlos mit unterschiedlichen TStringList ausgelesen wurde, so bleibt der Wert gleich, da es die selbe Quelle ist.

Auch die beiden anderen globalen Variablen kann man als falsch platziert betrachten, da sie ebenfalls nirgendwo benutzt werden.

Und warum das Alles überhaupt böse globale Variablen sind ... darüber könnte man auch noch streiten.

Dalai 5. Mär 2015 14:04

AW: Inifile Problem
 
Zitat:

Zitat von Maximum (Beitrag 1292385)
Zitat:

Bei der Ausgabe welches Arrays?
Bei der Ausgabe von helpf [...]

Das ist kein Array sondern eine TStringList.

Zitat:

Um ehrlich zu sein, wusst ich bisher noch nichtmal, dass das geht :oops: bin noch nicht so geübt im umgang mit Delphi...
Nun weißt du es ja und kannst es intensiv nutzen :).

Zitat:

Zitat:

Was wird überhaupt in die Funktion reingegeben als Parameter?
Ähm n ist ein Name, der wird gebraucht um auf das Verzeichnis der Datei zuzugreifen, [...]
Ich meinte eigentlich als Inhalt. Oder anders gefragt: Bist du sicher, dass der zusammengebaute Dateiname korrekt ist? Schließlich hängt davon ab, ob der nachfolgende Code so funktioniert, wie du das erwartest.

MfG Dalai

Maximum 5. Mär 2015 16:25

AW: Inifile Problem
 
Hallo allerseits^^
ich hab die Unit jetzt überarbeitet(die globalen Variablen sind jedoch noch vorhanden, möchte erstmal das alles funktioniert^^'),
aktuelles Ergebnis sieht so aus, das er die Arrays mit Daten bestückt, die Länge ist nun wie erwünscht "365", jedoch sind alle Werte = 0 also default.
Delphi-Quellcode:
unit ULoad2;

interface

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

var
helpb:tladen;
helpd:tladend;
j: integer;
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
  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;

end.
Zitat:

Ich meinte eigentlich als Inhalt. Oder anders gefragt: Bist du sicher, dass der zusammengebaute Dateiname korrekt ist? Schließlich hängt davon ab, ob der nachfolgende Code so funktioniert, wie du das erwartest.
Ja ich bin mir zu 100% sicher, dass der Dateipfad richtig zusammengesetzt wird^^

Medium 5. Mär 2015 16:37

AW: Inifile Problem
 
Zitat:

Zitat von Maximum (Beitrag 1292511)
Delphi-Quellcode:
  dir:=GetApplicationDirectory+n;
  Ini:=TIniFile.Create(dir+'\'+n+'.ini'); //Datei in Stringliste laden
Ja ich bin mir zu 100% sicher, dass der Dateipfad richtig zusammengesetzt wird^^

Dann liegst du wahrscheinlich zu 100% falsch. Ich glaube kaum, dass das "n" dort wirklich zwei Mal dran soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz