Structure + Memory + WriteData

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag von ts-soft »

Man übergibt keine Strukturen an Proceduren, die werden nur definiert, um damit
benutzerdefinierte Variablen oder strukturierte Pointer zu erstellen. Strukturen sind
immer Global, egal wo man sie definiert :wink:

Was das mit den hundertausend Datensätzen im moment mit dem Thema zu tun hat
ist mir auch nicht ganz klar. Sicherlich meinst Du einen bestimmten Bereich einer
strukturierten Variable als Pointer zu übergeben, das war hier aber nicht Thema.

Gruß
Thomas
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Structure + Memory + WriteData

Beitrag von Kaeru Gaman »

ja blablabla, natürlich rede ich von Strukturierten Variablen und nicht den Strukturen selber!

und er hat gefragt, wie er sie an Prozeduren übergeben kann, und üblicher Weise macht man das per Referenz, weil man üblicherweise MEHRERE davon hat und nicht nur eine. und er hat auch eingangs keinesfalls explizit herausgestellt dass er nur eine hat, also was?


btw: Strukturen sind nicht Global. sie haben überhaupt kein Scope.
sie sind compilerintern und existieren zur Laufzeit nicht namentlich, nur noch die Offsets bleiben übrig.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Structure + Memory + WriteData

Beitrag von mk-soft »

Zurück zu WriteData und ReadData mit Struckturen. War schon mal und habe es bei mir wieder gefunden.

Code: Alles auswählen

;-TOP
; Comment       : Get und Put Strukturdaten
; Author        : mk-soft, Germany
; Second Author : 
; File          : .pb
; Version       : 1.01
; Create        : 
; Update        : 
;
; Compilermode  :

; *****************************************************************************

#FileDB = 0

Procedure OpenDB(name.s)

  If OpenFile(#FileDB, name)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure


Procedure CloseDB()

  If IsFile(#FileDB)
    CloseFile(#FileDB)
  EndIf
EndProcedure

Procedure GetDB(id, *pdata, size)

  Protected max, pos, len
 
  If IsFile(#FileDB) = #False
    ProcedureReturn #False
  EndIf
 
  max = Lof(#FileDB)
  max / size
  max - 1
 
  If id > max
    ProcedureReturn #False
  EndIf

  pos = id * size
  FileSeek(#FileDB, pos)
  len = ReadData(#FileDB, *pdata, size)

  If len = size
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

Procedure PutDB(id, *pdata, size)

  Protected max, pos, len
 
  If IsFile(#FileDB) = #False
    ProcedureReturn #False
  EndIf
 
  max = Lof(#FileDB)
  max / size
 
  If id > max
    ProcedureReturn #False
  EndIf

  pos = id * size
  FileSeek(#FileDB, pos)
  len = WriteData(#FileDB, *pdata, size)
  If len = size
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf

EndProcedure

; *****************************************************************************

Structure udtData
  Name.s{20}
  Price.d
  Units.l
EndStructure

Global dataOut.udtData, dataIn.udtData

Debug "Open DB"
If OpenDB("TestDB.DAT")
  Debug "Ok."
Else
  Debug "Error Open"
  End
EndIf

Debug Lof(#FileDB)

Debug "Put..."

For id = 0 To 10
  With dataOut
    \Name = "Name ID " + Str(id)
    \Price = 10.5 + id
    \Units = 100 + id
  EndWith
  If PutDB(id, dataOut, SizeOf(udtData))
    Debug "PutDB Ok."
  Else
    Debug "PutDB Error"
  EndIf
Next

Debug "Change..."
  id = 5
  With dataOut
    \Name = "Hallo Welt: " + Str(id)
    \Price = 99.8
    \Units = 1000
  EndWith
  If PutDB(id, dataOut, SizeOf(udtData))
    Debug "PutDB Ok."
  Else
    Debug "PutDB Error"
  EndIf

Debug "Get..."
For id = 0 To 11
  If GetDB(id, dataIn, SizeOf(udtData))
    With dataIn
      Debug "ID     : " + Str(id)
      Debug "Name   : " + \Name
      Debug "Price  : " + StrD(\Price)
      Debug "Units  : " + Str(\Units)
    EndWith
  Else
    Debug "GetDB Error"
  EndIf
Next

CloseDB()
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten