Arrays in einer Structure verwenden...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Arrays in einer Structure verwenden...

Beitrag von Ghosty1967 »

Ich arbeite im Moment an einem kleinen Programm, welches mir diverse Messkanäle in einem einzeiligen ListIcon anzeigen soll.
Insgesamt habe ich 16 Messkanäle, die zusammen in einer Datei untereinander (Messschritt) und nebeneinander (Kanal0...15)
durch Tabs getrennt (0...15) abgelegt werden.

Im Moment behelfe ich mir beim einlesen und ablegen der Daten im Speicher wie folgt:

Code: Alles auswählen

Enumeration
  #window_User
  #listicon_Kanal
EndEnumeration

Structure Messkanal
  channel00.s: channel01.s: channel02.s
  channel03.s: channel04.s: channel05.s
  channel06.s: channel07.s: channel08.s
  channel09.s: channel10.s: channel11.s
  channel12.s: channel13.s: channel14.s
  channel15.s
EndStructure
Global NewList DATEN.Messkanal()


Procedure DrawInterface()
  If OpenWindow(#window_User, 0, 0, 1, 1, " Rohdaten anzeigen", #PB_Window_SystemMenu|#PB_Window_Invisible)  
    SetWindowLong_(WindowID(#window_User),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)
    ResizeWindow(#window_User,#PB_Ignore,#PB_Ignore,275,500) : ShowWindow_(WindowID(#window_User),#SW_SHOW)
    If CreateGadgetList(WindowID(#window_User))
      ListIconGadget(#listicon_Kanal   ,  5,  5,130,350,"Origalwert",126,#PB_ListIcon_GridLines)
    EndIf  
  EndIf      
EndProcedure

Procedure LoadRAWData(filename.s)
  ClearList(DATEN())
  ClearGadgetItemList(#listicon_Original)
  If ReadFile(1,filename)
    ;Kopfdaten überlesen, hier stehen nur angaben zu den Messgeräten.
    For Row=1 To 32: dummy.s=ReadString(1): Next Row
    While Eof(1)=0
      din.s=ReadString(1)
      AddElement(DATEN())
      DATEN()\channel00.s=StringField(din, 1,Chr(9))
      DATEN()\channel01.s=StringField(din, 2,Chr(9))
      DATEN()\channel02.s=StringField(din, 3,Chr(9))
      DATEN()\channel03.s=StringField(din, 4,Chr(9))
      DATEN()\channel04.s=StringField(din, 5,Chr(9))
      DATEN()\channel05.s=StringField(din, 6,Chr(9))
      DATEN()\channel06.s=StringField(din, 7,Chr(9))
      DATEN()\channel07.s=StringField(din, 8,Chr(9))
      DATEN()\channel08.s=StringField(din, 9,Chr(9))
      DATEN()\channel09.s=StringField(din,10,Chr(9))
      DATEN()\channel10.s=StringField(din,11,Chr(9))
      DATEN()\channel11.s=StringField(din,12,Chr(9))
      DATEN()\channel12.s=StringField(din,13,Chr(9))
      DATEN()\channel13.s=StringField(din,14,Chr(9))
      DATEN()\channel14.s=StringField(din,15,Chr(9))
      DATEN()\channel15.s=StringField(din,16,Chr(9))
    Wend
    CloseFile(1)
  EndIf
EndProcedure
...eine recht unelegante Lösung, da ich die Daten viel lieber in einem
Array innerhalb der "DATEN" Liste ablegen würde... also ungefähr so:

Code: Alles auswählen

Structure Messkanal
  channel.s(16)
EndStructure
Global NewList DATEN.Messkanal()

Procedure LoadRAWData(filename.s)
  ClearList(DATEN())
  ClearGadgetItemList(#listicon_Original)
  If ReadFile(1,filename)
    ;Kopfdaten überlesen, hier stehen nur angaben zu den Messgeräten.
    For Row=1 To 32: dummy.s=ReadString(1): Next Row
    While Eof(1)=0
      din.s=ReadString(1)
      AddElement(DATEN())
      For ch=1 to 16
        DATEN()\channel(ch)=StringField(din, ch,Chr(9))
      Next ch
    Wend
    CloseFile(1)
  EndIf
EndProcedure
Aber genau DAS funktioniert nicht. Aus der Hilfe werde ich nicht schlau.
Wie kann man denn Arrays in einer Liste verwenden?
Kann mir da jemand von Euch vielleicht mit einem Beispiel helfen?

Thx...
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

Beitrag von ts-soft »

Code: Alles auswählen

Structure Messkanal
  channel.s[16]; array von 0 - 15
EndStructure
PS: Kannste den doppelten Beitrag bitte löschen, bevor dort einer antwortet!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Ups, war der Finger auf der Maus wieder am zucken... :oops: schon gelöscht!
Sorry und Danke für die Antwort
Antworten