AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi 3 Dimensionale Array of Word Speichern Und Laden?
Thema durchsuchen
Ansicht
Themen-Optionen

3 Dimensionale Array of Word Speichern Und Laden?

Ein Thema von Hallo_Thomas · begonnen am 29. Apr 2006 · letzter Beitrag vom 29. Apr 2006
Antwort Antwort
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 20:39
Wie kann ich diese Array Speichern bzw Laden?
Mein Gedanke,ich weis recht unelegant, in 27 2Dimensionale Tabellen Speichern


Delphi-Quellcode:
type
  TIntArray3=Array of Array of Array of Word;
public
 Check : TIntArray3;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SetLength(Check,27,12,65535);
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 20:41
ich würde an den Anfang der Datei die Dimensionen schreiben und dahinter dann die ganzen Daten am Stück (per TStream).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#3

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 21:18
Irgenwie habsch noch nie wirklich nenn Plan, und dass ist doch bestimmt verkehrt


Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt]; // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      ArraySave3(Check,Filename);
    end;
  end;
end;


procedure TForm1.ArraySave3(bda: TIntArray3; fn: TFileName);
begin
  with TFileStream.Create(fn, fmCreate) do
  begin
    WriteBuffer(bda[0], Length(bda));
    Free;
  end;
end;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 21:28
Zitat von SirThornberry:
ich würde an den Anfang der Datei die Dimensionen schreiben und dahinter dann die ganzen Daten am Stück (per TStream).
Es ist sicherlich sinnvoll, einen Header mit den Dimensionen an den Anfang der Datei zu schreiben. Man sollte aber auf keinen Fall den kompletten Inhalt des Arrays als einen Datenblock speichern, weil nicht alle Daten sequentiell im Speicher abgelegt sein müssen. Also bleibt nur die folgende Möglichkeit:

Delphi-Quellcode:
Size := Length(Check[0, 0]) * SizeOf(Word);
for i := 0 to High(Check) do
  for j := 0 to High(Check[i]) do
    Stream.Write (Check[i, j, 0], Size);
Eventuelle Sonderfälle (Array nicht oder nicht vollständig initialisiert) sollte man natürlich noch abfangen. Der Code gilt auch nur dann, wenn alle Vektoren innerhalb einer Dimension exakt gleich lang sind. Anderfalls wird es komplizierter...

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#5

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 22:01
Bei mir gabs ne Fehlermeldung. Zugriffsverletzung im Modul...........


Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
var Stream:TStream;
  i,j,size:Integer;
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt]; // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      Size :=Length(Check[0, 0]) * SizeOf(Word);
      for i := 0 to High(Check) do
        for j := 0 to High(Check[0]) do
          Stream.Write (Check[i, j, 0], Size);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 22:10
Du solltest das Stream-Objekt natürlich auch erzeugen.

Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
var Stream:TStream;
  i,j,size:Integer;
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt]; // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      Stream := TFileStream.Create(Filename, fmCreate); // <<-- Stream erzeugen
      try
        Size :=Length(Check[0, 0]) * SizeOf(Word);
        for i := 0 to High(Check) do
          for j := 0 to High(Check[0]) do
            Stream.Write (Check[i, j, 0], Size);
      finally
        Stream.Free; // <<-- Stream freigeben
      end;
    end;
  end;
end;
BTW: glaubst du, daß ".txt" eine gute Erweiterung für eine binäre Datei ist?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#7

Re: 3 Dimensionale Array of Word Speichern Und Laden?

  Alt 29. Apr 2006, 23:12
Danke,das hat mich wirklich geholfen,Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:34 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