Autor
|
Thema: File of Record (614 / mal gelesen)
|
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005
|
erstellt am: 23. Sep. 2016 13:11 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe ein Type-Definition, die im Laufe der Berechnung mit ziemlich vielen Daten gefüllt wird. Code:
Public Type GeoType '** Informationen zu den Geometriegrößen Status(0 To GeoAnz) As Byte GName(1 To GeoAnz) As String '** Bezeichnung Wert(1 To GeoAnz) As Double Einheit(1 To GeoAnz) As String Schreibschutz(0 To GeoAnz) As Boolean
In Borland-Pascal gab es früher die Möglichkeit, einen File of Record zu definieren, also hier einen File vom Typ GeoType. Da konnte man dann mit einer kurzen Befehlssequence einen kompletten Recordsatz (hier Geo vom Typ GeoType) speichern bzw. laden.
Code:
assign(f_doppel,'FILE0001.TMP'); rewrite(f_doppel); write(f_doppel,geo); close(f_doppel);
Gibt es etwas Ähnliches in VBA unter MS-EXCEL? ------------------ ---------------- "Ich stimme mit der Mathematik nicht überein. Ich meine, daß die Summe von Nullen eine gefährliche Zahl ist." (Stanislaw Jerzy Lec) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 25. Sep. 2016 19:10 <-- editieren / zitieren --> Unities abgeben: Nur für Wyndorps
Hallo Wyndorps, Ach je, Turbo Pascal ... lang, lang ist es her. Aber ja man kann in VBA sehr viel machen, das mit Pascal auch ging, mal abgesehen von gewissen Pointeraktionen. Es gibt in VBA die Möglichkeit Recordsets zu definieren. Eine gute Hilfe dazu findest Du hier Temporäre selbst erzeugte kannst Du in einer Datei ablegen und wieder einlesen. Allerdings denke ich das brauchst Du gar nicht. Du kannst Deinen Typ auch anders definieren und ergänzen Als Beispiel mal ein binäres Schreiben Code:
Public Type GeoType '** Informationen zu den Geometriegrößen Status As Byte GName As String * 50 '** Bezeichnung Wert As Double Einheit As String * 4 Schreibschutz As Boolean End TypeSub geo_test() Sub geo_test() Dim GeoAnz As Long Dim GeoMax As Long GeoAnz = 0 GeoMax = 100 Dim Geo() As GeoType ' varibles Feld definieren ReDim Geo(GeoMax) ' Feld dimensionieren If GeoAnz = GeoMax Then GeoMax = GeoMax + 100 ReDim Preserve Geo(GeoMax) ' Feld vergrößern, Werte behalten End If With Geo(1) .GName = "32545" .Einheit = "m" End With Dim FF FF = FreeFile ' Datei löschen Open "FILE0001.TMP" For Output As #FF Close #FF ' Daten schreiben Open "FILE0001.TMP" For Binary Access Write As #FF Len = Len(Geo(1)) For i = 1 To GeoAnz Put #FF, i, Geo(i) Next i Close #FF End Sub End Sub
Natürlich könnte man das auch ohne feste Stringdefinition in der Type-Anweisung, allerdings müßte man dann die Daten sequentiell schreiben und lesen. Schau Dir einfach mal die verschiedenen Open .. For .. Parameter an. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005
|
erstellt am: 26. Sep. 2016 08:43 <-- editieren / zitieren --> Unities abgeben:
Das mit den dynamischen Feldern kannte ich sogar schon , aber OPEN..FOR und PUT noch nicht. Vielen Dank. ------------------ ---------------- "Ich stimme mit der Mathematik nicht überein. Ich meine, daß die Summe von Nullen eine gefährliche Zahl ist." (Stanislaw Jerzy Lec) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|