| Autor |
Beitrag |
Adrian
      
Beiträge: 314
|
Verfasst: Fr 23.05.08 13:22
Servus!
In einem Programm muß ich auf eine große Menge von vorberechneten Gleitkommawerten zugreifen. Sehr groß bedeutet, daß es sich um ein 3-dimensionales Array der Größe 256 x 256 x 6 handelt. Alle 20ms erhalte ich 2 Werte (im Bereich von 0...255) und brauche dann die daraus resultierenden 6 Kenngrößen aus dem Array.
Ich habe mir nun gedacht, in einem ersten Programm die Werte zu berechnen und in einem Array abzulegen. Dann schwebt mir etwas in der Art vor, das Array "irgendwie" zu speichern, und bei dem zweiten Programm als Resource einzubinden. An der Wortwahl kann man schon erkennen, daß ich mir über die Vorgehensweise überhaupt nicht klar bin, und bitte deshalb um Rat.
- Ist es möglich, ein Array in eine Resource umzumodeln, wenn ja, wie?
- Welche anderen, evtl. einfacheren Alternativen gäbe es noch?
Da die Berechnung der Daten nicht ganz unaufwendig ist, möchte ich sie nicht unbedingt bei jedem Programmstart durchführen, das ziehe ich nur in Erwägung falls alle Stricke reißen.
Gruß,
Adrian
|
|
ub60
      
Beiträge: 765
Erhaltene Danke: 130
|
Verfasst: Fr 23.05.08 15:01
Man kann das Ganze auch in eine Datei speichern und beim Programmstart einlesen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TMyArray = array[0..255,0..255,0..5] of Double; TMyFile = File of TMyArray; ... var MyFile : TMyFile; MyArray : TMyArray; begin AssignFile(MyFile,'daten.dat'); Reset(MyFile); Read(MyFile,MyArray); CloseFile(MyFile); end; |
Nicht getestet, nur so als Idee.
ub60
|
|
Silas
      
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: Fr 23.05.08 16:04
Du könntest dein erstes Programm auch einfach eine Quelltextdatei mit deinen Zahlen als Array drin erstellen lassen, die du im zweiten ganz normal einbindest. Dann würdest du dir auch das einlesen sparen.
_________________ Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Fr 23.05.08 16:55
Hi,
Grundsätzlich ist das hier(s.u.) schon der richtige Ansatz. Es ist sehr leicht möglich, in einer solchen TYPISIERTE DATEI neue Datensätze hinten anzuhängen oder nur die neuen auszulesen und somit die Datei nicht jedes Mal neu zu einzuscannen.
Ob du unbedingt Double brauchst, oder auch Single nehmen kannst, müsstest du dir noch überlegen.
Wie lange dauert das Erzeugen des Arrays denn und was lädst du da genau rein?
ub60 hat folgendes geschrieben: | Man kann das Ganze auch in eine Datei speichern und beim Programmstart einlesen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TMyArray = array[0..255,0..255,0..5] of Double; TMyFile = File of TMyArray; ... var MyFile : TMyFile; MyArray : TMyArray; begin AssignFile(MyFile,'daten.dat'); Reset(MyFile); Read(MyFile,MyArray); CloseFile(MyFile); end; |
Nicht getestet, nur so als Idee.
ub60 |
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Adrian 
      
Beiträge: 314
|
Verfasst: Sa 24.05.08 10:03
Servus!
Ich danke für die schnellen Antworten, ein Teil ist damit schon gelöst.
Daß man Arrays als Dateien speichern kann, dachte ich mir schon, aber daß das so einfach geht, hätte ich nicht vermutet. Insofern ist der Vorschlag von ub60 äußerst hilfreich, wobei ich - wie Hidden auch anmerkt - mit single als Zahlentyp durchaus zurande komme.
Was mir aber nun noch fehlt, ist das mit der Resource. Ich möchte unbedingt die Werte in meiner exe drin haben, um nur eine Datei weitergeben zu müssen. Ihr kennt das vielleicht auch, wenn das Projekt von einem zum andern weitergegeben wird, fällt irgendwann mal die Werte-Datei unter den Tisch, und dann gibts Fragen wie "Warum bewegt sich mein Gerät so komisch?" Das Schöne ist ja, daß an den Einträgen nichts mehr geändert wird, ich berechne sie einmal, und das wars dann auch. Es kommt nichts dazu, es fällt nichts weg, so wie in den Logarithmen-Tafeln (an die sich wahrscheinlich nur die über 45-jährigen hier erinnern können).
Was übrigens die Frage von Hidden betrifft: Bei meinem Rechner (AMD2600+, 1GB) dauert momentan die Berechnung und das zeitgleich erfolgende Speichern in eine csv-Datei ungefähr 10 Sek. Es wird aber bei der endgültigen Version auf schätzungsweise 30 Sek. anwachsen, da hier etwa die dreifache Datenmenge anfällt. Bei der Berechnung werden aufgrund von vorgegebenen Raumwinkeln und kartesischen Koordinaten mittels der Euler-Winkel Drehungen durchgeführt und die daraus entstehenden neuen Koordinatenpunkte sowie weitere Raumwinkel errechnet. Das Ganze dient als Grundlage zur Visualisierung der Bewegungen einer Art Roboterkonstruktion.
Ich freue mich auf eure Vorschläge.
Gruß,
Adrian
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Sa 24.05.08 11:35
Wenn sich die Werte wirklich nie ändern, ist Silas' Vorschlag wohl der beste.
|
|
Adrian 
      
Beiträge: 314
|
Verfasst: Mo 26.05.08 07:03
Servus!
Ja, die Werte ändern sich wirklich nicht. Also werde ich den Vorschlag von Silas umsetzen.
Danke für die Hilfe!
Gruß,
Adrian
|
|
|