AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi 2 dimensionalen Array in Datei speichern und wieder laden
Thema durchsuchen
Ansicht
Themen-Optionen

2 dimensionalen Array in Datei speichern und wieder laden

Ein Thema von MisterNiceGuy · begonnen am 20. Mär 2005 · letzter Beitrag vom 30. Mär 2005
Antwort Antwort
Seite 2 von 3     12 3      
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 28. Mär 2005, 19:51
@gekmihesg: Danke, aber möchte es mit Streams machen!

@Sprint: Dein Code funktioniert einwandfrei, wenn ich ihn auf Dateien die ich vorher mit SaveToFile gespeichert habe. Will ich aber irgendeine Datei, z.B. *.zip öffnen, sollte er ja
FileName + ' ist keine gültige Datei vom Typ TMyArray ausgeben.

Leider kommt er nicht zu der Exception-Instanzierung sondern wirft beim Einlesen schon nach dem ReadSignature eine Exception, lass ich diese Anweisung weg, wirft er auch in der nächten Zeile einen ERead-Exception.

Zusammenfassend: Der Compiler kommt nicht erst dorthin, um die gewünschte Exception auszuwerfen.

Was kann ich dagegen tun?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#12

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 28. Mär 2005, 20:10
Zitat von mytar:
Dein Code funktioniert einwandfrei, wenn ich ihn auf Dateien die ich vorher mit SaveToFile gespeichert habe. Will ich aber irgendeine Datei, z.B. *.zip öffnen, sollte er ja
FileName + ' ist keine gültige Datei vom Typ TMyArray ausgeben.
Also geht es dir jetzt um eine Fehlerbehandlung?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  IDENT_TMYARRAY = 'TMyArray';
  BUF_SIZE = 4096;
type
  TMyArray = array[1..12, 1..2] of String;

  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;

var
  MyArray: TMyArray;
begin

  if OpenDialog1.Execute then
  begin
    try
      LoadFromFile(MyArray, OpenDialog1.FileName);
    except
      on E: Exception do
        ShowMessage('Folgender Fehler ist aufgetreten: ' + E.Message);
    end;
  end;

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#13

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 17:26
Habs getestet. Funktioniert leider trotzdem nicht!

Die Anweisungen in der letzten if manipuliert ja glaub ich nur
die Exception-Message!

Ich glaub du hast mich falsch verstanden, muss mich dafür entschuldigen!

Wie bereits gesagt funktioniert der Code einwandfrei, für dateien die
die Signature und den Ident enthalten.

Bei anderen beliebigen Dateien, wie einem jpeg z.b., wird bereits nach dem
ReadSignature eine Exception "Unbekanntes Stream-Format" geworfen, was ich ja
auf keinen Fall will. Ich möchte ja bis zu "meiner" Exception die ich selbst auslöse.

Lass ich nun das ReadSignature weg, wirft er mir statt der einen Exception "Unbekannter
Eigenschaftswert".

D.h. ReadSignature und ReadIdent lösen bereits Exceptions aus. Der Compiler kommt
gar nicht mehr zur gewünschten auszulösenden Exception!

Bitte um Hilfe!

Danke

P.S. Bitte den Code einmal auf einen beliebige Datei testen! Bei mir werden dann leider die beiden ungewünschten Exceptions ausgelöst!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#14

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 17:30
Welche gewünschte Exeption?

Ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#15

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 17:37
Zitat von Ratte:
Welche gewünschte Exeption?

Ratte
raise Exception.Create(FileName + ' ist keine gültige Datei vom Typ TMyArray.'); Aber eigentlich kann doch keine (interne, also nicht eigene) Exception in einem try-Block ausgelöst werden .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 17:47
ReadSignature löst sehrwohl eine Exception aus, sowie ReadIdent!

Der Try-Block verhilft nur zu einer geregelten Fehlerbehandlung (glaub ich) !


Erbitte weiter Hilfe!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#17

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 18:01
Zitat von mytar:
Bei anderen beliebigen Dateien, wie einem jpeg z.b., wird bereits nach dem
ReadSignature eine Exception "Unbekanntes Stream-Format" geworfen, was ich ja
auf keinen Fall will. Ich möchte ja bis zu "meiner" Exception die ich selbst auslöse.
Du kannst die Exception doch so abfangen, wie ich es in dem Beispiel mit dem OpenDialog gemacht habe.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#18

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 19:59
Statt "Unbekanntes Stream-Format" gibt er mir halt "Folgender Fehler ist aufgetreten: Unbekanntes Stream-Format" aus.

Bitte probier es mit einer beliebigen Datei, du wirst sehen, er gibt dir diese Meldung aus. Diese Exception wird vom ReadSignature ausgelöst, "Unbekannter Eigenschaftwert" von ReadIdent vom Type EReadError wenn ein unbekannter ReadValue im Objekt vorhanden ist!

Bitte unbedingt testen! Danke!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#19

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 20:04
Zitat von mytar:
Statt "Unbekanntes Stream-Format" gibt er mir halt "Folgender Fehler ist aufgetreten: Unbekanntes Stream-Format" aus.
Ich weiß immer noch nicht was du willst. Wenn die Datei nicht gelesen werden kann, dann wird halt ein Fehler ausgelöst. Diesen kannst du abfangen. Auswerten. Anzeigen oder halt auch nicht.

Wo genau liegt jetzt dein Problem?
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#20

Re: 2 dimensionalen Array in Datei speichern und wieder lade

  Alt 29. Mär 2005, 20:07
Mein Ziel: LoadFromFile soll für jeden Dateityp funktionieren.
Falls er nicht vom Format IDENT_TMYARRAY ist, soll die gewünschte Exception ausgelöst
werden, ansonsten der Inhalt in die Variable MyArray geladen werden.

Am besten ist wirklich das Ziel mitteilen!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.
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