Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 dimensionalen Array in Datei speichern und wieder laden (https://www.delphipraxis.net/42531-2-dimensionalen-array-datei-speichern-und-wieder-laden.html)

MisterNiceGuy 20. Mär 2005 12:55


2 dimensionalen Array in Datei speichern und wieder laden
 
Hi, ich hab einen 2d-Array

Delphi-Quellcode:
f:array[1..12,1..2] of string;
den ich in einer externen Datei speichern und wieder daraus laden möchte.

Kann mir jemand sagen wie ich das am besten anstelle?

Sprint 20. Mär 2005 13:37

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
Delphi-Quellcode:
const
  IDENT_TMYARRAY = 'TMyArray';
  BUF_SIZE = 4096;
Delphi-Quellcode:
type
  TMyArray = array[1..12, 1..2] of String;
Delphi-Quellcode:
procedure SaveToFile(const MyArray: TMyArray; const FileName: String);
var
  Stream: TFileStream;
  Writer: TWriter;
  I, J: Integer;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  try
    Writer := TWriter.Create(Stream, BUF_SIZE);
    try
      Writer.WriteSignature;
      Writer.WriteIdent(IDENT_TMYARRAY);
      for I := 1 to 12 do
        for J := 1 to 2 do
          Writer.WriteString(MyArray[I, J]);
    finally
      Writer.Free;
    end;
  finally
    Stream.Free;
  end;
end;
Delphi-Quellcode:
procedure LoadFromFile(var MyArray: TMyArray; const FileName: String);
var
  Stream: TFileStream;
  Reader: TReader;
  I, J: Integer;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead);
  try
    Reader := TReader.Create(Stream, BUF_SIZE);
    try
      Reader.ReadSignature;
      if Reader.ReadIdent <> IDENT_TMYARRAY then
        raise Exception.Create(FileName + ' ist keine gültige Datei vom Typ TMyArray.');
      for I := 1 to 12 do
        for J := 1 to 2 do
          MyArray[I, J] := Reader.ReadString;
    finally
      Reader.Free;
    end;
  finally
    Stream.Free;
  end;
end;

MisterNiceGuy 20. Mär 2005 17:34

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
danke schön :)

mytar 27. Mär 2005 19:23

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
Der Code funktioniert einwandfrei bei dateien die ich vorher mit SaveToFile erstellt habe.

Will ich jetzt aber, ich bin ja dumm, eine beliebige Datei mit LoadFromFile öffnen, passiert folgendes:
  • Delphi-Quellcode:
    Reader.ReadSignature;
    Löst bei mir die Exception "Unbekannter Stream-Typ" aus!
    (Was macht ReadSignature eigentlich, bin aus der OH nicht schlau geworden?



  • Wenn ich nun die Anweisung weglasse, löst
    Delphi-Quellcode:
    Reader.ReadIdent <> IDENT_TMYARRAY
    eine EReadError Exception aus.

    Wenn ich mit dem Debugger vorher Reader.ReadValue überprüfe gibt
    er mit rvint64, wo er mir doch eigentlich rvIdent liefern müsste!

Bitte um Hilfe!

Danke

Sprint 28. Mär 2005 10:45

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
ReadSignatur und ReadIdent prüfen, ob der Stream mit den gespeicherten Daten übereinstimmt. Damit nicht versehentlich falsche Daten geladen werden, die nicht zu deinem Array passen.

DP-Maintenance 28. Mär 2005 11:04

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit Windows-API zu tun

Airblader 28. Mär 2005 11:12

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
Die Exception dürfte zwecks des try-finally-blocks aber auch nur beim starten aus delphi raus passieren.
im kompilierten programm wird wohl keine kommen

air

mytar 28. Mär 2005 15:32

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
@Airblader: Doch! In IDE und außerhalb!

Bei einer beliebigen Datei welche die Signatur und das Ident nicht enthält,
werden die oben genannten Exceptions ausgelöst,
was kann ich dagegen machen.

Ich möchte vor allem Spider bitten, sich das anzuschauen!

Danke!

Sprint 28. Mär 2005 17:53

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
Zitat:

Zitat von mytar
Bei einer beliebigen Datei welche die Signatur und das Ident nicht enthält,
werden die oben genannten Exceptions ausgelöst,
was kann ich dagegen machen.

Zuerst solltest du den Aufbau der Daten analysieren und dir dann darüber gedanken machen wie man diese einlesen könnte. Als nächstes solltest du versuchen deine Ideen in Schlüsselwörter umzusetzen und die Suchmaschine deiner Wahl benutzen. Sollte die Suche aussichtslos sein oder/und die eigene Umsetzung nicht zustande kommen, dann poste hier doch mal den Aufbau der Datei.

gekmihesg 28. Mär 2005 18:15

Re: 2 dimensionalen Array in Datei speichern und wieder lade
 
also das is vielleicht ein bischen einfacher:

Delphi-Quellcode:
type TMyArray = array[0..12,0..2] of integer;

procedure Save(Arr: TMyArray);
var
  f: file of TMyArray;
begin
  AssignFile(f, FILENAME);
  Rewrite(f);
  try
    Write(f,Arr);
  finally
    CloseFile(f);
  end;
end;

procedure Load(var Arr: TMyArray);
var
  f: file of TMyArray;
begin
  AssignFile(f, FILENAME);
  Reset(f);
  try
    Read(f,Arr);
  finally
    CloseFile(f);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Seite 1 von 3  1 23      

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