Seite 1 von 1

Arrays in einer Structure verwenden...

Verfasst: 22.01.2009 09:25
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...

Verfasst: 22.01.2009 09:35
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!

Verfasst: 22.01.2009 09:42
von Ghosty1967
Ups, war der Finger auf der Maus wieder am zucken... :oops: schon gelöscht!
Sorry und Danke für die Antwort