Autor Beitrag
Smartie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 26.04.05 09:35 
Hallo,

also, das Lesen etc aus der INI funktioniert wunderbar. Mein Problem im Augenblick, ich bin unfelxibel.

Folgenden Code hab ich:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
type
  TStringDynArray = array of String;
  TZStringArr = array[0..30] of String;     //Array der Zeilen

var
  MySList: TStringList;
  X: Integer; 
// Für INIlesen
var F, BN, Name, Byte, Format, Bereich, KonvertFormat : String;
// Für INI öffnen und Lesen
var datei: String;
//für zeilenlauf
var z : Integer;
implementation

uses Unit2;

{$R *.dfm}

{-----------------------------------------------------------------------------
  Procedure : INI auswählen und öffnen
  Version   : Alfa

  Resultat    : Gibt die Möglichkeit entsprechende INI auszusuchen
-----------------------------------------------------------------------------}

procedure INIoeffnen;
begin
    with Form1 do
    if opendialog1.execute then
      datei := opendialog1.FileName

      else datei := '';
end;

{-----------------------------------------------------------------------------
  Procedure : Aus INI lesen
  Version   : Alfa

  Resultat    : Zerstückelter String im Array zur weiteren Verarbeitung
-----------------------------------------------------------------------------}


procedure INIlesen;
var //datei, rein: String; //wurden wegen lesen & verarbeiten als global deklariert
//Global Definiert  F, BN, Name, Byte, Format, Bereich, KonvertFormat
    //ini : TIniFile;
    exparr: TStringDynArray;
    zeilenarr : TZStringArr;

begin
     // testen wir mal mit dem TString den Zugriff auf die ini

    begin
      MySList := TStringList.Create;
      MySList.LoadFromFile(datei);

      //Schau mer mal wies mit den einzelen Zeilen aussieht
      for X := 0 to MySList.Count-1 do
      zeilenarr[x] := MySList.Strings[x];

      MySList.Free;
    end;


    exparr := Unit2.explode('||', zeilenarr[z]);

    F := exparr[0];
    BN := exparr[1];
    Name := exparr[2];
    Byte := exparr[3];
    Format := exparr[4];
    Bereich := exparr[5];
    KonvertFormat := exparr[6];

end;


Nun, wie zu sehen ist mein Zeilenarray als Array[0..30] deklariert.
Tja, aber das gefältl mir nicht. Denn, Es sind unter umständen mal nur 25. Und was ist wenn plötzlich doch viel mehr Zeilen drin stehen sollen? Es ist nicht allzu sinnvoll (denk ich mir) einen ewig großen Array hinzuknallen, damit auch ja imemr alels reinpasst.

Sprich:
Es wäre sinvoll, die Größe des Arrays so zu ählen, daß sie IMMER genau der Anzahl der Zeilen im INI entsprich.

Hat jemand eine Idee? Meine bisherigen Experimente mit Dyanic Arrays waren nicht sehr fruchtbar.

Lieben Gruß

Smartie
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Di 26.04.05 09:39 
Hallo,

wo ist das Problem? Du hast doch die Anzahl der Zeilen bereits in Deiner Stringlist!!! Anstatt sie sofort nach dem Lesen zu löschen, würde ich mit dieser weiterarbeiten.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 26.04.05 09:45 
Hallo,

mit anderen Worten, ein
array[0..30] of String


nur statt der 30, eben mein

ausblenden Delphi-Quelltext
1:
MySList.Count					


und das
ausblenden Delphi-Quelltext
1:
MySList.Free;					

laß ich einfach sein (Ich denk, des hab ich vergessen)

Tausend Dank,

Smartie

EDIT: Hm... nein, ganz so einfach gehts leider nicht. Auch nicht wenn ich es über n Integer "einfach mal" neu deklarier. Wie mach sowas am "dümmsten"?

Danke und Lieben Gruß

Smartie
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Di 26.04.05 09:56 
Hallo,

statt
ausblenden Delphi-Quelltext
1:
exparr := Unit2.explode('||', zeilenarr[z]);					
kannst Du doch
ausblenden Delphi-Quelltext
1:
exparr := Unit2.explode('||', MySList.Strings[z]);					

schreiben.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Di 26.04.05 09:58 
Du läßt dein zeilenarr einfach weg und arbeitest direkt mit der Stringlist - freigeben musst du die natürlich trotzdem, aber ers, wenn du komplett fertig bist, also so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure INIlesen;  
var 
  //datei, rein: String; //wurden wegen lesen & verarbeiten als global deklariert  
  //Global Definiert  F, BN, Name, Byte, Format, Bereich, KonvertFormat  
  //ini : TIniFile;  
  exparr: TStringDynArray;  
begin  
  // testen wir mal mit dem TString den Zugriff auf die ini  
  MySList := TStringList.Create;  
  MySList.LoadFromFile(datei);  

  exparr := Unit2.explode('||', MySList[z]);  
 
  F := exparr[0];  
  BN := exparr[1];  
  Name := exparr[2];  
  Byte := exparr[3];  
  Format := exparr[4];  
  Bereich := exparr[5];  
  KonvertFormat := exparr[6];  

  MySList.Free; 
end;


Ich nehme an, da muss noch eine Schleife rein, um die Zeilen dann durchzugehen statt nur Zeile z zu lesen.

Stefan
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Di 26.04.05 09:58 
user profile iconSmartie hat folgendes geschrieben:
[...]mit anderen Worten, ein
array[0..30] of String

nur statt der 30, eben mein

MySList.Count[...]

Nein, Du sollst auf das Array ganz verzichten. Du hast die Elemente doch schon in Deiner StringList. btw: Warum arbeitest Du nicht mit den entsprechenden Klassen für .INI-Files. Hast Du ein eigenes Format? Dann würde ich es nicht .INI nennen.
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 26.04.05 10:08 
Ok, dankeschön.

ERgo: Man (=Ich) sollte sich nicht zu sehr auf seine bisherigen Punkte verkrampfen, und etwas größer denken :oops:

Lieben Gruß

Smartie
Smartie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Di 26.04.05 10:11 
user profile iconStefan.Buchholtz hat folgendes geschrieben:


Ich nehme an, da muss noch eine Schleife rein, um die Zeilen dann durchzugehen statt nur Zeile z zu lesen.

Stefan


Ja, du nimsmt völlig richtig an. Jede Zeile der INI enthällt nämlich Informationen, wie man einen bestimmten Teil meiner Datei zu interpretieren hat.
Und so gehe ich das dann stück für Stück durch. Erstmal muß ich aber die Einzelkomponenten richtig zum laufen bekommen, und dann kan nich das Komplette austesten. Ich bin ja an sich schon beim "Zusammensetzen"

Lieben Gruß

Smartie