Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array speichern und laden (https://www.delphipraxis.net/134195-array-speichern-und-laden.html)

Melvyn 17. Mai 2009 17:22


Array speichern und laden
 
Hi,

wie kann ich ein Werte eines Arrays in einer externen Datei speichern und durch laden wieder in einem Stringrid ausgeben lassen?
ich bin bis jetzt soweit gekommen:
Delphi-Quellcode:
type TValue=record
 a:integer ;
 b:boolean ;
end;

type Tf= array[1..81] of TValue ;
var sp: file of Tf;

procedure TForm1.FormCreate(Sender: TObject);
begin
 if fileexists('xxx.dat')
 then assignfile(sp,'xxx.dat')
 else
  begin
   assignfile(sp,'xxx.dat');
   rewrite(sp);
   closefile(sp);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject)
var hilf:Tf; x,y:integer ;
begin
 reset(sp);
 write(sp,hilf);
 closefile(sp);
end;

procedure TForm1.Button2Click(Sender: TObject)
var hilf:Tf; x,y:integer ;
begin
 reset(sp);
 read(sp,hilf);
 StringGrid1.Cells[x,y]:=hilf;
 closefile(sp);
end;
das speichern funktioniert, die datei wird erzeugt und es steht auch was drin, aber die ausgabe klappt nicht, da kommt die fehlermeldung: Inkompatible Typen 'String' und 'Tf'

bitte helft mir...
Melvyn

himitsu 17. Mai 2009 17:26

Re: Array speichern und laden
 
erstmal mußt du die Datei zum Schreiben auch mit Schreibzugriff öffnen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject)
var hilf:Tf; x,y:integer ;
begin
rewrite(sp);
und hilf ist ein Array of Record und Cells ist ein String
Delphi-Quellcode:
StringGrid1.Cells[x,y] := hilf;
da mußt du also hilf einzeln durchgehn und die Integer/Boolean auch noch in einen String umwandeln :zwinker:

mkinzler 17. Mai 2009 17:28

Re: Array speichern und laden
 
Was soll den um Grid ausgegeben werden?
Der Typ kann natürlich so nicht in eine Zelle geschrieben werden.

Melvyn 17. Mai 2009 17:35

Re: Array speichern und laden
 
mmh aber erzeugt rewrite nicht eine komplett neue datei?
meines wissens nach is doch reset der befehl um eine datei zu öffnen...
den rest ahb ich nicht kapiert, kannst du mir ein beispiel geben was du meinst?

@mkinzler: in das stringgrid werden zahlen und buchstaben eingegeben und abgespeichert. die sollen dann auch wieder ausgegeben werden...

himitsu 17. Mai 2009 17:44

Re: Array speichern und laden
 
Delphi-Quellcode:
// Reset  - zum lesen öffnen
// Rewrite - zum schreiben öffnen
// Append - zum lesen/schreiben öffnen und cursor ans Dateiende


// aus system.pas:

function _ResetText(var t: TTextRec): Integer;
begin
  Result := OpenText(t, fmInput);
end;

function _RewritText(var t: TTextRec): Integer;
begin
  Result := OpenText(t, fmOutput);
end;

function _Append(var t: TTextRec): Integer;
begin
  Result := OpenText(t, fmInOut);
end;

Zitat:

Zitat von Melvyn
@mkinzler: in das stringgrid werden zahlen und buchstaben eingegeben und abgespeichert. die sollen dann auch wieder ausgegeben werden...

siehe:
Zitat:

Zitat von himitsu
und hilf ist ein Array of Record und Cells ist ein String
Delphi-Quellcode:
StringGrid1.Cells[x,y] := hilf;
da mußt du also hilf einzeln durchgehn und die Integer/Boolean auch noch in einen String umwandeln :zwinker:

hilf <> string

Melvyn 17. Mai 2009 17:51

Re: Array speichern und laden
 
kann ich nicht einfach hilf so umwandeln das es im grid ausgegeben wird?
wenn ja wie mach ich das

(ich kenne nur StrToInt und IntToStr)

mkinzler 17. Mai 2009 17:55

Re: Array speichern und laden
 
Hier brauchst du BoolToStr() und IntToStr() oder Format()

himitsu 17. Mai 2009 17:59

Re: Array speichern und laden
 
tja, das mußt du schon selber machen

z.B: dein hilf-Array durchgehn, umwandeln und die Ergebnisse an irgendwas übergeben ...
Delphi-Quellcode:
for i := 1 to 81 do begin
  StringGrid1.Cells[0,i] := IntToStr(hilf[i].a);
  StringGrid1.Cells[1,i] := BoolToStr(hilf[i].b);
end;

Melvyn 17. Mai 2009 18:28

Re: Array speichern und laden
 
achso jetz hab ichs kapiert :-D

aber mal noch ne andre frage: wie lasse ich buchstaben, die im stringgrid stehn in zahlen umwandeln?

hab mir das so gedacht (funktioniert aber nicht):
Delphi-Quellcode:
Stringrid1.Cells[x,y]:=chr(ord(Stringgrid1.cells[x,y])-16);
meinetwegen wenn in[0,0] ein A steht das es zu einer 1 umgewandelt wird, mit der gerechnet weden kann...

himitsu 17. Mai 2009 18:33

Re: Array speichern und laden
 
einen String kannst du nicht so direkt in eine Zahl umwandeln, wenn dann könntest du höchstens das 1. Zeichen im String also [1] so verarbeiten
Delphi-Quellcode:
Stringrid1.Cells[x,y]:=chr(ord(Stringgrid1.cells[x,y][1])-16);
aber das hat ja jetzt nichts mit dem Array-Datei-Problem dieses Threads zu tun


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.
Seite 1 von 2  1 2      

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