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
Seite 1 von 3  1 23      
Maximum

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

Inifile Problem

  Alt 4. Mär 2015, 22:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#2

AW: Inifile Problem

  Alt 4. Mär 2015, 22:51
[...] 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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Inifile Problem

  Alt 5. Mär 2015, 00:31
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Maximum

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

AW: Inifile Problem

  Alt 5. Mär 2015, 05:43
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

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 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

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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Inifile Problem

  Alt 5. Mär 2015, 07:36
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.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Inifile Problem

  Alt 5. Mär 2015, 11:24

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 5. Mär 2015 um 11:25 Uhr) Grund: erkannte Tippfehler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Inifile Problem

  Alt 5. Mär 2015, 11:36
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#8

AW: Inifile Problem

  Alt 5. Mär 2015, 15:04
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 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
  Mit Zitat antworten Zitat
Maximum

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

AW: Inifile Problem

  Alt 5. Mär 2015, 17:25
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^^

Geändert von Maximum ( 5. Mär 2015 um 17:29 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: Inifile Problem

  Alt 5. Mär 2015, 17:37
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.
"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
Antwort Antwort
Seite 1 von 3  1 23      


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 06:18 Uhr.
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