Random Access Files Dr John Abraham Advantages of
Random Access Files Dr. John Abraham
Advantages of Random Access • Access one record without disturbing others • Modify that record • Create Index if needed to access it many ways
Structure • Module module. Person. Rec • Structure person. Record • <VBFixed. String(7)> Public Record. Number As String • <VBFixed. String(9)> Public SS As String • <VBFixed. String(40)> Public Name As String • <VBFixed. String(10)> Public Tele As String • <VBFixed. String(2)> Public Line. Break As String • End Structure
Using Structure • • Public DATAFILE As String = "mydb. mdf" Public Person As person. Record Public Position As Long Public Last. Record As Long Public File. Length As Long Public index. SS(100) As String Public index. Key(100) As Long • End Module
Opening a Random file • • Private Sub btn. Open_Click_1(By. Val sender As System. Object, By. Val e As System. Event. Args) Handles btn. Open. Click Position = 1 ' Calculate the record length. Rec. Length = Len(Person) File. Open(1, DATAFILE, Open. Mode. Random, , , Rec. Length) File. Length = LOF(1) Last. Record = File. Length / Rec. Length lbl. Connected. Text = "Connected. . . Total " & Last. Record & " Records Found. " • lbl. Rec. No. Text = Last. Record + 1 • End Sub
Writing to a Random File • Person. SS = txt. SSN. Text • Person. Name = txt. Name. Text • Person. Tele = txt. Tele. Text • Person. Line. Break = Chr(13) & Chr(10) • Last. Record = LOF(1) / Rec. Length • Person. Record. Number = Last. Record + 1 • 'If Last. Record > 0 Then find. Link(link) • File. Put(1, Person, Last. Record + 1)
Reading from a Random File • File. Get(1, Person, Val(txt. Key. Text)) • txt. SSN. Text = Person. SS • txt. Name. Text = Person. Name • txt. Tele. Text = Person. Tele
Reading one after another (scanning) • Private Sub tab. Scan_Click(By. Val sender As Object, By. Val e As System. Event. Args) Handles tab. Scan. Click • • Position = 1 lbl. Position. Text = Position File. Get(1, Person, Position) lbl. SS. Text = Person. SS lbl. Name. Text = Person. Name lbl. Tele. Text = Person. Tele End Sub
Displaying a record • Dim tmps As String With Person • lbl. Position. Text = Person. Record. Number • tmps = Trim(Person. SS) • lbl. SS. Text = tmps. Substring(0, 3) & "-" & tmps. Substring(3, 2) & "-" & tmps. Substring(5) • lbl. Name. Text = Trim(Person. Name) • tmps = Trim(Person. Tele) • lbl. Tele. Text = tmps. Substring(0, 3) & "-" & tmps. Substring(3, 3) & "-" & tmps. Substring(6) • End With
Linear Search • For i = 1 To LOF(1) / Rec. Length • File. Get(1, Person, i) • If Person. Name. Index. Of(txt. Name. Search. Text) > -1 Then • lbl. Name. S. Text = Person. Name • lbl. Tele. S. Text = Person. Tele • lbl. SSn. S. Text = Person. SS • lbl. Rec. S. Text = i • Exit For • Else • lbl. Name. S. Text = "Not Found" • lbl. Tele. S. Text = "" • lbl. SSn. S. Text = "" • lbl. Rec. S. Text = 0 • End If
Creating and Index on SS • Last. Record = LOF(1) / Rec. Length • For i = 1 To Last. Record • File. Get(1, Person, i) • index. SS(i) = Person. SS • index. Key(i) = i • Next
Sorting Index • • • • i = Last. Record Do sorted = True For j = 1 To i - 1 If index. SS(j) > index. SS(j + 1) Then sorted = False temp 1 = index. SS(j) : temp 2 = index. Key(j) index. SS(j) = index. SS(j + 1) : index. Key(j) = index. Key(j + 1) index. SS(j + 1) = temp 1 : index. Key(j + 1) = temp 2 End If Next j i=i-1 Loop While Not sorted ' (sorted = False) Message. Box. Show("Index Sorted. ", "Sort")
Binary Search • • • • • Lookfor = Trim(txt. SSn. S. Text) nfound = False first = 1 : last = Last. Record While (Not (nfound) And first <= last) middle = (first + last) 2 Message. Box. Show(Lookfor & " " & index. SS(middle), "Binary search demonstration ") If Lookfor = Trim(index. SS(middle)) Then nfound = True File. Get(1, Person, index. Key(middle)) lbl. Name. S. Text = Person. Name lbl. Tele. S. Text = Person. Tele lbl. SSn. S. Text = Person. SS lbl. Rec. S. Text = index. Key(middle) Else. If Lookfor < index. SS(middle) Then last = middle - 1 Else first = middle + 1 End If End While If Not (nfound) Then lbl. Name. S. Text = "Not Found!"
- Slides: 13