Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamischen Array laden (https://www.delphipraxis.net/80052-dynamischen-array-laden.html)

Larky 2. Nov 2006 09:21


dynamischen Array laden
 
Hallo Zusammen!
Bin ganz neu hier, habe nämlich keine Delphi-Hilfe( obwohl ichs legal runtergeladen habe) deswegen musste ich bisher also alle KLeinigkeiten hier nachlesen! Soweit auch kein Problem nur dass ich jetzt dabei bin meinen dynamischen Array zu speichern! Soweit klappt das ja auch der speichert das dann als TStringList!
Nur da ich ja nicht weiß wie groß mein Array ist, weiß ich auch nicht wie ich den laden soll!!!

Bitte bitte brauche gaanz schnell hilfe da mein prog am Freitag fertig sein sollte!
Danke schon mal im vorraus
Grüße Larky

mkinzler 2. Nov 2006 09:30

Re: dynamischen Array laden
 
Wie speicherst du ihn den?

3_of_8 2. Nov 2006 09:31

Re: dynamischen Array laden
 
Was für ein Array? Woraus willst du das Laden? Was hat das ganze mit einer TStringList zu tun?

fwsp 2. Nov 2006 09:33

Re: dynamischen Array laden
 
welche delphi-version hast du denn, das da gar keine hilfe drin sein sollte (noch nicht mal ne schlechte...).
zeig doch mal ein bisschen code.

Larky 2. Nov 2006 10:05

Re: dynamischen Array laden
 
ich benutze Turbo Delphi, da wir das von der BA halt bekommen haben!
Das ist nen Terminkalenderprogramm für ne Arztpraxis
das heißt ich schreibe alle Termine in einen array of array of String!
die zeilen anzahl ist halt immeer 133 (erste Zeile für den SChlüssel zum suchen und so; und die restlichen halt für die Uhrzeit nen im 5 Minuten Takt) Die Spalten anzahl richtet sich halt nach dem Benutzer für jeden Tag pro Therapeut wird eine neue Spalte erzeugt!

Als ich mich zum Thema Speichern und Laden umgeschaut hab hab ich halt ne Prozedur gefunden die das als TStringList speichert!!

Also hier meine speicher prozedur

procedure TFStartseite.speichernClick(Sender: TObject);
var i, j: integer;
slDaten: TStringList;
begin
slDaten := TStringList.Create;
for i := 0 to high(Oberarray) do
for j := 0 to 132 do
slDaten.Add((oberarray[i, j]));
slDaten.SaveToFile('termine');
slDaten.Free;
end;


das klappt auch so weit super!!

hier jetzt die Laden Prozedur:

procedure TFStartseite.LadenClick(Sender: TObject);
var
i, j, Count: integer;
slDaten: TStringList;

begin
slDaten := TStringList.Create;
slDaten.LoadFromFile('termine');
Count := 0;
for i := 0 to (???) do <-- hier ist das Problem weil ich nicht weiß wie groß die Liste ist!!
for j := 0 to 132 do
begin
Oberarray[i, j] :=(slDaten[count]);
inc(Count);
end;
slDaten.Free;
end;

Klaus01 2. Nov 2006 10:07

Re: dynamischen Array laden
 
Also, wenn es eine TextDatei ist, dann kannst DU sie mit einer Stringlist laden.
Delphi-Quellcode:
StringList.loadfromFile
Oder du kannst das ganze auch zu Fuß erledigen.

Delphi-Quellcode:
Datei: TextFile;
einZeile:String;

AssignFile(Datei,'Da wo Deine Datei liegt und wie sie heißt');
Reset(Datei);
While not eof(Datei) do
begin
  Readln(datei,eineZeile);
end;
CloseFile(datei)
oder habe ich da etwas ganz falsch verstanden?

Edit: for i := 0 to SlDaten.count -1 do

Edit2: kannst Du vielleicht mal eine Datei anhängen, ich kann mir nicht vorstellen wie die so ausschaut.

Grüße
Klaus

Union 2. Nov 2006 10:09

Re: dynamischen Array laden
 
Ich würd mal tippen
Delphi-Quellcode:
trunc(slDaten.Count / 133)
Denn ein Block besteht doch immer aus 133 Einträgen (0..132)

ibp 2. Nov 2006 10:12

Re: dynamischen Array laden
 
Delphi-Quellcode:
procedure TFStartseite.LadenClick(Sender: TObject);
var
  i, j: integer;
  slDaten: TStringList;

begin
  slDaten := TStringList.Create;
  slDaten.LoadFromFile('termine');
  for i := 0 to slDaten.count-1 do  <-- hier ist die lösung!!!!
  begin
    for j := 0 to 132 do
    begin
      Oberarray[i, j] :=slDaten[i];
    end;
  end;
  slDaten.Free;
end;

c64ranni 2. Nov 2006 10:20

Re: dynamischen Array laden
 
Hallo!
I würds einfach so machen
Delphi-Quellcode:
procedure Speichern(Sender: TObject);
var i, j: integer;
slDaten: TStringList;
begin
slDaten := TStringList.Create;
slDaten.Add(InttoStr(HIGH(Oberarray)=);
for i := 0 to high(Oberarray) do
for j := 0 to 132 do
slDaten.Add((oberarray[i, j]));
slDaten.SaveToFile('termine');
slDaten.Free;
end;
Damit hasch jetzt in der ersten Zeile der Stringlist die Länge stehen.
Beim Laden kannst die die Erste Zeile auslesen und dann hast den Count.
Aber ich schätze mal, dass es sich mit dem
Delphi-Quellcode:
slDaten.Count div 133
auch ausgehen müssten.


edit: Sorry hab das INttoStr vergessen.
Wenn du ein dynamisches Array hast, dann ist die Laderoutine von dir aber noch nicht fertig.
Du musst noch die Länge des dynamischen Arrays festelgen.

Larky 2. Nov 2006 10:22

Re: dynamischen Array laden
 
ja aber die Frage ist wie ich das in meinen array reinbekomme !

HAb es jetzt wie folgt gelöst:

var
i, j, Count: integer;
slDaten: TStringList;
Laengetxt:real;

begin
slDaten := TStringList.Create;
slDaten.LoadFromFile('terminehedrich');
Count := 0;
Edit1.text:=inttostr (sldaten.Count);
Laengetxt:=sldaten.count/133;
for i := 0 to round (Laengetxt) do
for j := 0 to 132 do
begin
Setlength (Oberarray,i+1);
Oberarray[i, j] :=(slDaten[count]);
inc(Count);
end;
slDaten.Free;
end;


Problem nur der gibt mir nen Fehler aus das das Listenmaximum (133) überschritten wurde aber das kann doch gar nicht sein da meine for-SChleife nur bis 132 geht!! Ich krieg hier langsam echt nen Anfall!! AGGRESSIONEN!!!!!

ibp 2. Nov 2006 10:38

Re: dynamischen Array laden
 
siehe mein post oben!

Larky 2. Nov 2006 10:44

Re: dynamischen Array laden
 
count zählt doch jede Zeile oder??
WEnn ja is das doch auch falsch weil der dann ja pro anzahl der zeilen eine neue Spalte in meinem Array einfügt!!!

ibp 2. Nov 2006 10:46

Re: dynamischen Array laden
 
ja, aber du schreibst doch auch je array-feld eine zeile!

hast du dir mal deine datei angesehen?

c64ranni 2. Nov 2006 10:53

Re: dynamischen Array laden
 
Wenn dein Array so aussieht
Delphi-Quellcode:
type
  TReihe = array[0..132] of Integer;
  TGrid = array of TReihe;
Dann könntest dus am einfachsten über einen FileStream machen, dann hast du auch gleich a bisserl a "Codierung" drinnen und nicht jeder kann die Daten einfach ändern oder lesen, indem er die Datei mitn Editor aufmacht.

So gehts mitn FileStream
Delphi-Quellcode:
procedure Speichern;
var
  I,J : Integer
  FS : TFileStream;
  mInt : Integer;
  Ver : Integer;
begin
  FS := TFileStream.Create('DATEINAME',fmCreate);
  try
    Ver := 1
    FS.WriteBuffer(Ver,sizeof(Ver));
    FS.WriteBuffer(Length(Oberarray),Sizeof(Length(Oberarray)));
    for I := Low(Oberarray) to High(Oberarray) do
    begin
      for J := 0 to 132 do
      begin
       mInt := Oberarray[I][J]      
       FS.WriteBuffer(mInt,Sizeof(mInt));
       //Bei einem String musst dus anders machen
      end;
    end;
  finally
    FS.Free;
  end;
end;

procedure Laden;
var
  I,J : Integer
  FS : TFileStream;
  mInt : integer
  Ver : Integer
begin
  FS := TFileStream.Create('DATEINAME',fmread);
  try
    FS.ReadBuffer(Ver,Siezof(Ver));
    if Ver <> 1 then FEHLER!!!!!
    FS.ReadBuffer(I,Sizeof(I));
    SetLength(Oberarray,I+1);
    for I := 0 to (I-1) do
    begin
      for J := 0 to 132 do
      begin
        FS.ReadBuffer(mInt,Sizeof(mInt));
        oberarray[I][J] := mInt;
        //Bei einem String musst dus anders machen
      end;
    end;
  finally
    FS.Free;
  end;
end;
Das sollte normalerweise funktionieren.
Einzige Ausnahme, bei einem String musst mehr in den Stream speichern, sonst funktiniert das mit jedem Datentyp. und du bist flexibler bei Erweiterungen, mit Versionsnummer!

ibp 2. Nov 2006 10:53

Re: dynamischen Array laden
 
sorry hattest recht, hatte was übersehen, so sollte es gehen...

Delphi-Quellcode:
procedure TFStartseite.LadenClick(Sender: TObject);
var
  i, j, zeile: integer;
  slDaten: TStringList;

begin
  slDaten := TStringList.Create;
  slDaten.LoadFromFile('termine');

  zeile:=0;

  setlength(slDaten,slDaten.count); <---  nachtrag, arraygröße stzen!

  for i := 0 to slDaten.count-1 do  <-- hier ist die lösung!!!! 
  begin
    for j := 0 to 132 do
    begin
      Oberarray[zeile, j] :=slDaten[i];
    end;
    inc(zeile);  '<----------
  end;
  slDaten.Free;
end;
[edit] arraygröße!

Larky 2. Nov 2006 11:56

Re: dynamischen Array laden
 
YUHU es funktioniert!

Hab noch nen bissl rumgebastelt und jetzt klappts endlich!!

Danke für eure Hilfe! Echt super wie schnell man hier Antworten bekommt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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-2025 by Thomas Breitkreuz