đâu trong Colletion. Ta cũng có thể truy cập vào một phần tử thông qua chỉ số thứ tự của nó trong Collection giống như đối với mảng.
Ngược lại với mảng khi ta đã thêm một phần tử vào Collection ta chỉ có thể đọc mà không thay đổi được phần tử này. Ta chỉ có thể thay đổi giá trị của nó bằng cách xóa phần tử cũ và thêm phần tử mới.
Trước khi sử dụng thì Collection phải được tạo ra. Giống như với các đối tượng một Collection phải được khai báo sau đó tạo ra như đoạn lệnh sau:
Dim EmployeeNames As Collection Set EmployeeNames = New Collection
Hoặc ta có thể khai báo như sau:
Dim EmployeeNames As New Collection
Để thêm một phần tử vào Collection ta sử dụng phương thức Add với hai tham số là giá trị mà ta muốn thêm và chuỗi mã khóa (key) kết hợp với nó. Ví dụ, bổ sung vào Collection Employee phần tử John Smith có key = “Marketing” ta sử dụng phương thức Add như sau:
EmployeeNames.Add "John Smith", "Marketing"
Thông thường phương thức Add sẽ chèn thêm một phần tử vào cuối nhưng ta có thể xác định vị trí cần lưu trữ phần tử bằng cách sử dụng tham số before hoặc after.
' Chèn thêm giá trị này vào sau phần tử đầu tiên trong Collection.
EmployeeNames.Add "Anne Lipton", "Sales"
' Chèn giá trị mới này vào trước phần tử vừa tạo
EmployeeNames.Add "Robert Douglas", ,"Sales"
2.24.2. Truy xuất giá trị trong Collection
Để truy xuất vào một giá trị trong Collection ta sử dụng phương thức Item . Đây là phương thức ngầm định của Collection vì thế ta có thể bỏ qua. Các phần tử có thể được đọc thông qua chỉ số hoặc thông qua chuỗi mã khóa của chúng.
Ví dụ:
' All the following statements print "Anne Lipton". Print EmployeeNames.Item("Sales")
Print EmployeeNames.Item(1) Print EmployeeNames("Sales") Print EmployeeNames(1)
Để lấy số phần tử trong Collection sử dụng phương thức Count, nó trả về số phần tử trong Collection.
Ví dụ:
' In ra phần tử cuối cùng của Retrieve EmployeeNames collection.
Print EmployeeNames.Item(EmployeeNames.Count)
2.24.3. Xoá một giá trị trong Collection
Phương thức Remove được sử dụng để loại bỏ một phần tử ra khỏi Collection, phương thức này chấp nhận cả chỉ số hoặc chuỗi mã khóa.
Ví dụ:
EmployeeNames.Remove "Marketing" Sub RemoveAllItems(col As Collection)
Do While col.Count col.Remove 1
Loop End Sub
Chú ý:Collection không cho phép gỡ bỏ tất cả các phần tử một lúc, vì vậy để gỡ bỏ tất cả các phần tử ta phải sử dụng phương pháp lặp.
2.24.4. Thay đổi giá trị một phần tử trong Collection
Để thay đổi giá trị của một phần tử trước tiên ta phải xóa nó ra khỏi Collection sau đó thêm một phần tử mới.
Ví dụ:
Sub ReplaceItem(col As Collection, index As Variant, newValue As Variant) ' Loại bỏ phần tử.
col.Remove index ' Sau đó thêm mới.
If VarType(index) = vbString Then
' Thêm một phần tử mới với cùng chuỗi mã khóa. col.Add newValue, index
Else
' Thêm một phần tử mới ở cùng một vị trí
„ (không có chuỗi mã khóa). col.Add newValue, , index
End If End Sub
2.25. Bản ghi
2.25.1. Khai báo kiểu bản ghi
Bản ghi là kiểu dữ liệu cho phép chúng ta có thể khai báo nhiều loại thông tin với các kiểu dữ liệu khác nhau trong một biến. Cú pháp khai báo kiểu bản ghi:
Type <tên kiểu dữ liệu>
<thành phần 1> As <kiểu dữ liệu 1>
<thành phần 2> As <kiểu dữ liệu 2>
. . .
<thành phần n> As <kiểu dữ liệu n> End Type
Ví dụ:
Type HocSinh HoTen As String
NgaySinh As Date End Type
2.25.2. Khai báo biến bản ghi
Sau khi khai báo kiểu bản ghi, ta sử dụng kiểu dữ liệu đó để khai báo biến, mảng bản ghi giống như khai báo các biến thông thường khác. Cú pháp khai báo biến bản ghi:
Public/Private/Dim Tên_biến As Tên_kiểu_bản_ghi
Ví dụ:
Dim x As Hocsinh Public Ds( ) As Hocsinh
2.25.2. Sử dụng biến bản ghi
Chúng ta có thể truy cập các thành phần (trường) trong một biến bản ghi theo cú pháp: <biến> . <thành phần>
hoặc:
With <biến>
. <thành phần> End With
Ví dụ:
Dim Hs1, Hs2 As HocSinh
HS1. HoTen = “Nguyễn Văn Minh” Hs1. NgaySinh = #5/5/1985#
With HS2
. HoTen = “Trần Thắng”
. NgaySinh = #9/8/1985# End With
Chúng ta cũng có thể gán hai biến bản ghi cùng kiểu cho nhau.
Ví dụ:
HS2 = Hs1
2.26. Tệp tin
Tệp tin là một dãy các byte được tổ chức lưu trữ trên bộ nhớ ngoài. Khi ứng dụng truy cập đến tệp tin, nó xem các byte như là các kí tự, bản ghi, số nguyên, chuỗi v.v…Ta có thể gọi tệp tin là tệp
2.26.1. Phân loại tệp tin
Dựa trên phương pháp truy xuất tệp tin có thể phân tệp tin thành 3 loại: Tệp tin truy xuất tuần tự, tệp tin truy xuất ngẫu nhiên, tệp tin truy xuất nhị phân.
Tệp tin truy xuất tuần tự là tệp tin mà khi truy xuất ứng dụng sẽ truy xuất từ đầu tệp tin theo từng dòng văn bản.
Tệp tin truy xuất ngẫu nhiên là tệp tin mà khi truy xuất ứng dụng có thể truy xuất tại bất kỳ vị trí nào trong tệp tin mà không phải truy xuất tuần tự từ đầu tệp tin theo từng khối dữ liệu có kích thước cố định.
Tệp tin truy xuất nhị phân là tệp tin mà khi truy xuất ứng dụng có thể truy xuất tại bất kỳ vị trí nào trong tệp tin mà không phải truy xuất tuần tự từ đầu tệp tin theo từng byte dữ liệu. Tệp tin truy nhập nhị phân là một trường hợp riêng của tệp tin truy xuất ngẫu nhiên.
Trước khi truy xuất một tệp tin, ta cần khai báo một biến tệp tin có kiểu số nguyên, nó sẽ nhận một giá trị nguyên dương mà windows cung cấp khi tệp tin được mở, dùng để nhận diện tệp tin và làm việc với tệp tin. Số nguyên dương này được gọi là số hiệu tệp tin và không được trùng với số hiệu của một tệp tin đang được mở khác. Khai báo biến tệp tin theo cú pháp:
Public/Private/Dim Biến_tệp As Byte
Ví dụ:
Dim f As Byte
Ta có thể dùng hàm freefile để gán giá trị cho biến tệp tin tránh việc trùng số hiệu tệp tin.
f = freefile( )
2.26.2. Thủ tục truy xuất tệp tin
a) Mở tệp tin
Đối với tệp tin truy xuất tuần tự
Mở tệp tin để đọc: Open Tên_tệp For Input As #Biến_tệp
Mở tệp tin để ghi: Open Tên_tệp For Output As #Biến_tệp
Mở tệp tin để ghi bổ sung vào cuối:
Open Tên_tệp For Append As #Biến_tệp
Đối với tệp tin truy xuất ngẫu nhiên
Open Tên_tệp For Random As #Biến_tệp Len = Kích_thước_khối
Thông thường mỗi khối dữ liệu là một bản ghi. Vì vậy, để xác định kích thước khối dữ liệu mỗi lần đoc/ghi vào tệp ta dùng hàm Len(Biến_bản_ghi).
Ví dụ:
Open “ds.dat” For Random As #f Len = Len(x) ‟x là một biến kiểu bản ghi
Đối với tệp tin truy xuất nhị phân
Open Tên_tệp For Binary As #Biến_tệp
b) Ghi dữ liệu vào tệp tin
Đối với tệp tin truy xuất tuần tự
Print #Biến_tệp, Nội dung cần ghi vào tệp
Đối với tệp tin truy xuất ngẫu nhiên
Put #Biến_tệp, vị trí bản ghi, biến bản ghi
Đối với tệp tin truy xuất nhị phân
Put #Biến_tệp, vị trí byte dữ liệu, biến
c) Đọc dữ liệu từ tệp tin
Đối với tệp tin truy xuất tuần tự
Input(số ký tự cần đọc, biến tệp): Đọc một số ký tự tính từ vị trí hiện hành của con trỏ tệp và trả về các ký tự đọc được.
Line Input #Biến_tệp, biến: Đọc một dòng văn bản và lưu vào biến nhớ
Đối với tệp tin truy xuất ngẫu nhiên
Get #Biến_tệp, vị trí bản ghi, biến bản ghi : Đọc một bản ghi và lưu vào biến nhớ.
Đối với tệp tin truy xuất nhị phân
Get #Biến_tệp, vị trí byte dữ liệu, biến_nhớ: Đọc số byte dữ liệu bằng kích thước của biến_nhớ.
d) Đóng tệp tin
Close #Biến_tệp
Ví dụ: Viết chương trình mở tệp tin dsts.dat chứa danh sách thí sinh, trong đó thông tin về mỗi sinh viên gồm: Số báo danh, họ và tên, tuổi và điểm thi. Form Danh sách thí sinh có dạng:
Yêu cầu: Lập trình cho các nút lệnh để duyệt danh sách, bổ sung, sửa, xóa thông tin về thí sinh.
Bước 1. Thiết kế form bằng cách đưa vào các điều khiển: Label, TextBox, Commandbutton, sau đó xác lập vị trí, kích thước cho các điều khiển cho phù hợp.
Bước 2. Thiết lập giá trị cho một số thuộc tính cho các điều khiển theo bảng:
Điều khiển | Thuộc tính | Giá trị | Ghi chú | |
1 | Form | Name | Form1 | |
Caption | Danh sách thí sinh | |||
2 | CommandButton | Name | cmdfirst | |
Caption | Về đầu | |||
3 | CommandButton | Name | cmdpre | |
Caption | Về trước | |||
4 | CommandButton | Name | cmdadd | |
Caption | Thêm | |||
5 | CommandButton | Name | cmdedit | |
Caption | Sửa | |||
6 | CommandButton | Name | cmddel | |
Caption | Xóa | |||
7 | CommandButton | Name | cmdnext | |
Caption | Về sau | |||
8 | CommandButton | Name | cmdlast | |
Caption | Về cuối | |||
9 | TextBox | Name | txtsbd | |
10 | TextBox | Name | txtten | |
11 | TextBox | Name | txttuoi | |
12 | TextBox | Name | txtdiem |
Có thể bạn quan tâm!
- Ngăn Cách Các Câu Lệnh Trên Một Dòng
- Tham Số Và Việc Truyền Tham Số Cho Chương Trình Con
- Lập trình Window - 9
- Lập trình Window - 11
- Thêm Các Phần Tử Vào Trong Hộp Danh Sách.
- Các Điều Khiển Drivelistbox, Dirlistbox Và Filelistbox
Xem toàn bộ 248 trang tài liệu này.
Label | Caption | Số báo danh | ||
14 | Label | Caption | Họ và tên | |
15 | Label | Caption | Tuổi | |
16 | Label | Caption | Điểm thi |
13
Bước 3. Từ menu hệ thống chọn Project/Add Module để bổ sung vào Project hiện hành Module1, sau đó gò vào đó phần khai báo cấu trúc bản ghi thisinh như sau:
Type thisinh
sbd As String * 5 hoten As String * 30 tuoi As Byte
diem As Double End Type
Bước 4. Mở cửa sổ Code của Form1 và gò vào các dòng lệnh sau:
Dim n As Byte, i As Byte, f As Byte Dim x As thisinh
Private Sub ht(x As thisinh) txtsbd.Text = x.sbd txtten.Text = x.hoten txttuoi.Text = x.tuoi txtdiem.Text = x.diem
End Sub
„-----------------------------------------------------------------------------------------
Private Sub nhap(ByRef x As thisinh) x.sbd = txtsbd.Text
x.hoten = txtten.Text x.tuoi = Val(txttuoi.Text)
x.diem = Val(txtdiem.Text) End Sub
„-----------------------------------------------------------------------------------------
Private Sub cmdadd_Click()
If cmdadd.Caption = "Thªm" Then txtsbd.Text = ""
txtten.Text = "" txttuoi.Text = ""
txtdiem.Text = "": txtsbd.SetFocus cmdadd.Caption = "L•u"
Else
n = n + 1 Call nhap(x) i = n
Put #f, i, x cmdadd.Caption = "Thªm"
End If End Sub
„-----------------------------------------------------------------------------------------
Private Sub cmddel_Click() Dim g As Byte, j As Byte Dim traloi As Byte
traloi = MsgBox("Ban muon xoa ban ghi nay", vbYesNo + vbQuestion, "Xóa dữ liệu")
If traloi = 6 Then g = FreeFile()
Open "tam.dat" For Random As #g Len = Len(x) For j = 1 To i - 1
Get #f, j, x Put #g, j, x
Next
For j = i + 1 To n Get #f, j, x
Put #g, j, x Next
Close f Close g
Kill "dsts.dat"
Name "tam.dat" As "dsts.dat" n = n - 1
f = FreeFile()
Open "dsts.dat" For Random As #f Len = Len(x) If n > 0 Then
If i > n Then i = 1 Get #f, i, x
Call ht(x) End If