18. december 2003 - 13:20Der er
11 kommentarer og 1 løsning
Gemme 2d array til fil
jeg prøver at gemme et 2d array i en fil med TFileStream.. men jeg får en access vio. når jeg prøver at læse fra filen igen.
jeg følgende :
gem array...
filnavn:='entest.txt'; assignFile(fil, filnavn); Rewrite(fil); closefile(fil); with Tfilestream.create(filnavn, fmOpenWrite) do begin wrtie(mitarray, sizeof(mitarray)); free; end;
hent fra fil... with Tfilestream.create(filnavn, fmOpenRead) do begin read(mitarray, sizeof(mitarray)); free; end;
procedure TForm1.FormCreate(Sender: TObject); var i, j: Integer; begin SetLength(Matrix_Array, 30); for i := 0 to Length(Matrix_Array) - 1 do for j := 0 to 53 do Matrix_Array[i][j] := Format('[%d,%d]', [i, j]); end;
procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; HorseWrite: TWriter; FileStream: TFileStream; begin FileStream := TFileStream.Create('Hest.txt', fmCreate); HorseWrite := TWriter.Create(FileStream, $FF); HorseWrite.WriteListBegin; for i := 0 to Length(Matrix_Array) -1 do for j := 0 to 53 do HorseWrite.WriteString(Matrix_Array[i][j]); HorseWrite.WriteListEnd; FreeAndNil(HorseWrite); FreeAndNil(FileStream); end;
procedure TForm1.Button2Click(Sender: TObject); var i, j: Integer; HorseReader : TReader; FileStream: TFileStream; begin FileStream := TFileStream.Create('Hest.txt', fmOpenRead or fmShareDenyWrite); HorseReader := TReader.Create(FileStream, $FF); HorseReader.ReadListBegin;
for i := 0 to Length(Matrix_Array) -1 do for j := 0 to 53 do Matrix_Array[i][j] := HorseReader.ReadString;
1) Format('[%d,%d]', [i, j]); skriver fx. [0,12] for det 12. element i den 0. række 1a) Jeg sætter størelsen til 30 fordi det er et Dynamisk Array. Noget skulle jeg finde på. 2) $FF er størelsen på den buffer jeg bruger .... Det har ikke den store betydning. Jeg bruger altid den størelse. 3) Jow da. Det er bare at bruge den lokale variabel, i stedet for den globale.
det er nogle fine svar - mange tak skal du have.!.. og du får dine points.. men jeg tænkte på om du for nogle flere points vil hjælpe mig med mit sidste delspørgsmål..?
Hvis jeg nu laver to functions som indeholder dine to knappers kode... altså:
function gemarray_tilfil(v_array: Tmatrix) : boolean; ..hvor den gemmer arrayet i en fil og returnere om det gik godt eller ej.
function hentarray_frafil(filnavn: string) : Tmatrix; ..hvor den henter arrayets data og returnerer arrayet.
hvad er der galt med ovenstående fremgangsmåde.. jeg mister nemlig arrayets indhold når jeg på baggrund af et klik på en knap sender mit array til en funktion.
f.eks. if gemarray_tilfil(Matrix_array) = true then showshowmessage('det gik fint') else showmessage('det ikke ikke');
der bliver simpelthen ikke gemt noget i filen.. selvom at arrayet er FYLDT med data - meget skørt.
jeg håber du kan hjælpe mig med det sidste problem.. jeg er desperat så jeg giver dig gerne 45 points yderligere for en løsning på dette problem.
jeg idiot.. jeg glemte at sætte længden på den lokale variabel/array i functionen.. jamen så skulle det virke - dejligt :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.