'FORM CONTAINS
'COMMAND1 TO CREATE FILE
'COMMAND2 TO READ FILE
'COMBO1 TO CHOOSE METHOD OF SORTING . .STYLE = 2
'LIST1 RESULTS... SORTED = FALSE, VISIBLE = TRUE
'LIST2 SORTING ... SORTED = TRUE, VISIBLE = FALSE
'u can leave 2 visible to see what is happening
Option Explicit
Private Type PersonType
Name As String * 40
DOB As String * 8 'yyyymmdd format for sorting
Gender As String * 1
Weight As Single
End Type
Dim Person() As PersonType
Dim lCounter As Integer
Dim lFileNum As Byte
Private Sub Form_Load()
'Fill combo with sorting methods
With Combo1
.AddItem "Sort by name"
.AddItem "Sort by date"
.AddItem "Sort by gender"
.AddItem "Sort by weight"
.Enabled = False
End With
End Sub
Private Sub Command1_Click()
'Make a dummy file
ReDim Person(4)
With Person(0): .Name = "Smith, John": .DOB = "19710320": .Gender = "M": .Weight = 72: End With
With Person(1): .Name = "Jones, Jenny": .DOB = "19680422": .Gender = "F": .Weight = 64: End With
With Person(2): .Name = "Bloggs, Bob": .DOB = "19851201": .Gender = "M": .Weight = 80: End With
With Person(3): .Name = "Green, Theresa": .DOB = "19780411": .Gender = "F": .Weight = 55: End With
With Person(4): .Name = "Brown, David": .DOB = "19910708": .Gender = "M": .Weight = 68: End With
lFileNum = FreeFile 'Find file number
Open "C:\Sample.txt" For Random As lFileNum Len = Len(Person(0))
For lCounter = 0 To UBound(Person)
Put lFileNum, lCounter + 1, Person(lCounter) 'Write to file
Next
Close lFileNum
Command1.Enabled = False
End Sub
Private Sub Command2_Click()
Dim lLength As Long
lLength = FileLen("c:\Sample.txt") \ Len(Person(0)) 'find no of records
ReDim Person(lLength) 'Make array for number of records
'Read file .. assume file was made at any time
lFileNum = FreeFile 'Find file number
Open "C:\Sample.txt" For Random As lFileNum Len = Len(Person(0))
For lCounter = 0 To UBound(Person)
Get lFileNum, lCounter + 1, Person(lCounter)
Next
Close lFileNum
Command2.Enabled = False
With Combo1
.Enabled = True
.ListIndex = 0 'Default to sort by name
End With
End Sub
Private Sub Combo1_Click() 'Style 2 list only
'Sort based on selection
With List2 'List 2 is sorted and invisible
.Clear
For lCounter = 0 To UBound(Person)
Select Case Combo1.ListIndex
Case 0: .AddItem Person(lCounter).Name
Case 1: .AddItem Person(lCounter).DOB
Case 2: .AddItem Person(lCounter).Gender
Case 3: .AddItem Format$(Person(lCounter).Weight, "0000.0")
End Select
'store the record number in the itemdata
.ItemData(.NewIndex) = lCounter
Next
End With
'Transfer sorted data to list1
List1.Clear
For lCounter = 0 To List2.ListCount - 1
With Person(List2.ItemData(lCounter))
'Copy list2 to list 1 in same order
List1.AddItem Trim$(.Name) & vbTab & .DOB & vbTab & .Gender & vbTab & .Weight
End With
Next
List1.ListIndex = 0
End Sub