| Autor |
Beitrag |
Smartie
      
Beiträge: 205
|
Verfasst: 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:
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; var MySList: TStringList; X: Integer; var F, BN, Name, Byte, Format, Bereich, KonvertFormat : String; var datei: String; var z : Integer; implementation
uses Unit2;
{$R *.dfm}
procedure INIoeffnen; begin with Form1 do if opendialog1.execute then datei := opendialog1.FileName
else datei := ''; end;
procedure INIlesen; var exparr: TStringDynArray; zeilenarr : TZStringArr;
begin begin MySList := TStringList.Create; MySList.LoadFromFile(datei);
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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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 
      
Beiträge: 205
|
Verfasst: Di 26.04.05 09:45
Hallo,
mit anderen Worten, ein
array[0..30] of String
nur statt der 30, eben mein
Delphi-Quelltext
und das
Delphi-Quelltext
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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 26.04.05 09:56
Hallo,
statt
Delphi-Quelltext 1:
| exparr := Unit2.explode('||', zeilenarr[z]); | kannst Du doch
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
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: 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:
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 exparr: TStringDynArray; begin 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
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Di 26.04.05 09:58
Smartie 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 
      
Beiträge: 205
|
Verfasst: 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
Lieben Gruß
Smartie
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Di 26.04.05 10:11
Stefan.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
|
|
|