Entwickler-Ecke

Dateizugriff - Array als txt speichern?


Henneberg - Do 11.04.13 21:32
Titel: Array als txt speichern?
Hallo
also ich hab davon durch Zufall vor einiger Zeit von meinem Lehrer gehört doch bekomm es leider nicht mehr hin.
Zu meinem Problem:

ich habe ein eindimensionales statisches Array und habe nun gehört das man das mit savetofile als txt speichern kann und mit loadfromfile wieder in ein array laden kann. Ich habe im internet immer wieder etwas von einer stringlist gehört, kenne mich da aber nicht so aus. Außerdem waren die dort vorgestellten Lösungen lang und kompliziert und in meiner Erinnerung ging das damals deutlich leichter.

Ich hoffe mir kann jemand helfen ;)
MfG Henneberg


Quitzlinga - Do 11.04.13 21:55

Hi,

Hier mal ein Link zu einem sehr gutem Tutorial dazu.

http://www.delphi-treff.de/tutorials/vcl/listen-in-delphi/die-methoden-von-tstrings/

MfG

Quitzlinga


WasWeißDennIch - Fr 12.04.13 09:21

Man könnte natürlich das Array in eine TStringlist überführen und diese speichern, zum Laden das ganze andersherum. Allerdings stellt sich dann die Frage, ob man nicht gleich TStringlist benutzt und das Array abschafft. Da es sich aber wohl um ein Schulprojekt handelt, könnte ich mir vorstellen, dass das nicht gewünscht ist, daher ein Ansatz (aus dem Kopf getippt):

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:
type 
  TStringArray = array of string;

procedure SaveArrayToFile(const Arr: TStringArray; const Filename: string);
var
  List: TStringlist;
  i: integer;
begin
  List := TStringlist.Create;
  try
    for i := Low(Arr) to High(Arr) do
      List.Add(Arr[i]);
    List.SaveToFile(Filename);
  finally
    List.Free;
  end;
end;

procedure LoadArrayFromFile(var Arr: TStringArray; const Filename: string);
var
  List: TStringlist;
  i: integer;
begin
  List := TStringlist.Create;
  try
    List.LoadFromFile(Filename);
    SetLength(Arr, List.Count);
    for i := 0 to List.Count - 1 do
      Arr[i] := List[i];    
  finally
    List.Free;
  end;
end;

Irrtümer vorbehalten.


IhopeonlyReader - Sa 13.04.13 14:29

mhh.. vielleicht hilft dir ja ein record ?


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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TStringArray = record
  Strings: Array[1..100of String[100]; //Array MUSS staatisch und String MUSS begrenzt sein
end;


type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  EinArrayVon: TStringArray;
  Pfad: String;

implementation

{$R *.dfm}

procedure Speichern;
var F: File of TStringArray;
begin
  try
     AssignFile(F, Pfad);
     ReWrite(F);
     Write(F, EinArrayVon);
   finally
     CloseFile(F);
   end;
end;

procedure Laden;
var  F: File of TStringArray;
begin
   try
     AssignFile(F, Pfad);
     Reset(F);
     Read(F, EinArrayVon);
   finally
     CloseFile(F);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var C: Integer;
begin
//alle Strings beschreiben
For C:=Low(EinArrayVon.Strings) to High(EinArrayVon.Strings) do        //von 1 bis 100
  EinArrayVon.Strings[C] := 'Test';

Pfad := ExtractFilePath(Application.Exename) + 'AbgespeicherteVar.txt';
Speichern;
end;

end.


Falls du was nicht verstehst einfach fragen :)