B. VIẾT LỆNH CHO CÁC ĐỐI TƯỢNG
VII. Mảng và truy cập tuần tự 1.Mảng
Trước khi dùng bảng ta cần khai báo mảng bao gồm: Tên mảng, số phần tử.
Tương tự như khai báo biến, nếu mảng được khai báo trong phần khai báo chung của Form, mảng được dùng chung cho mọI thủ tục trong Form. Nếu mảng được khai báo trong tập tin module vớI các khoá Gobal, mảng được dùng chung cho mọI thủ tục có mặt trong Project. Có khi phảI lưu trữ một mảng trong một variant, ta dùng chỉ mục bình thường để tìm đến nó.
Mảng biến [variant array] ( gọI tắt là mảng ) là cấu trúc căn bản để tổ chức thông tin trong Visual Basic. Có thể dễ dàng lưu trữ và tìm nhiều mục trong mảng.
Để phân biệt giữa các mục lưu trữ trong mảng, ta dùng kiểu tham số đặc biệt có tên chỉ mục [index].
Tất nhiên, một khi bắt tay xây dựng các mảng lớn, ta cần có các phương cách nhanh chóng, hiệu quả để tìm và sắp xếp nộI dung.
Để thực hiện ta dùng hàm Array vớI cú pháp là:
Array (arglist)
Ở đó, đốI số arglist bao gồm một danh sách các mục, được tách biệt bởI các dấu phẩy, ví dụ
Dim A As Variant
A = Array (1, 2, 3, 4, 5) 2. Các danh sách mảng môt chiều
Chủ chương của mảng một chiều ( gọI là danh sách [list] đó là cung cấp một phương thức có hệ thống để đặt tên các nhóm biến có liên quan, thuộc thành phần của một mảng. VớI Visual Basic, mảng một chiều [ one_dimensional array] chẳng qua là một tập hợp [collection] các biến, mà từng biến được định dang bởI hai nộI dung:
- Tên mảng
- Vị trí của mục trên mảng.
Mảng Fonts mà Visual Basic dùng để lưu trữ tên các phông chữ và các phông chữ được lưu chữ trong Fonts (0), Fonts(1), v . v…
Lưu ý: dấu đồn đo la “$” cho biết các biến trên mảng một chiều này sẽ lưu giữ các chuỗi.
* Cách làm việc vớI mảng một chiều
Các giá rị bên trong mảng một chiều thường được gán bằng một vòng lặp For_Next hoặc dùng một vòng lặp Do kèm vớI một đợt kiểm tra, bởI thông thường ta muốn ngưng trước khi nhập toàn bộ dữ liệu. Có thể ta thấy an tâm khi luôn biết chắc số lượng các mục trong một mảng một chiều. Nó giúp cho tiến trình gỡ rốI dễ dàng hơn, cũng như hầu hết các lập trình viên, có thể thấy các vòng lặp For_Next dễ dàng hơn so vớI vòng lặp Do.
Các hộp liệt kê cũng là một cách để lưu trữ thông tin ( kiểu mảng) trong vài tình huống, việc dùng hộp liệt kê có thể là một phương cách lưu trữ dữ liệu tốt hơn so vớI mảng một chiều
3. Mảng đa chiều
Có thể dùng các mảng có nhiều chiều; thường được gọI là mảng đa chiều [multidimensional array]. Cũng như các danh sách dữ liệu dẫn đến một chỉ số dướI đơn ( các mảng một chiều), các bảng dữ liệu dẫn đến các chỉ số dướI kép ( mảng hai chiều).
Ta có qui ước: tham chiếu khoản nhập đầu tiên cho số lượng hàng và khoản nhập thứ hai để cho số lượng cột. Theo qui ước này, ta có thể mô tả đoạn mã của bảng cửu chương dướI dạng điền trọn một hàng, theo từng cột nhập thứ hai để cho số lượng cột. Theo qui ước này, ta có thể mô tả đoạn mã của bảng cửu chương dướI dạng điền trọn một hàng, theo từng cột, trước khi dờI đến hàng kế tiếp.
Mảng được sử dụng trong chương trình ARRAYS là mảng một chiều. Visual basic cho phép khai báo mảng nhiều chiều. ví dụ sau khi khai báo mảng hai chiều :
Static MyArray (0 to 3,1 to 4)
Các phần tử mảng được liệt kê như sau:
MyArray (0,1) My Array (0,2) MyArray (0,3) MyArray (0,4) MyArray(1,1) MyArray (1,2) MyArray (1,3) MyArray (1,4) MyArray(2,1) MyArray (2,2) MyArray (2,3) MyArray (2,4) MyArray(3,1) MyArray (3,2) MyArray (3,3) MyArray (3,4) Tương tự khai báo mảng ba chiều
Dim MyArray (1 to 3, 1 to 7, 1 to 5).
Visual Basic cho phép mảng khai báo mảng tốI đa có 60 chiều! Sau đây là mã lệnh cho phép gán giá trị 3 vào các phần tử mảng hai chiều
Static MyArray (1 to 10, 1 to 10) Dim Counter 1, Counter 2
For Counter 1 = 1 to 10 For Counter 2 = 1 to 10
MyArray (Counter 1, Counter 3) =3 Next
Next
4.Mảng động và mảng cố định
Trong Visual Basic, các mảng không thể kết thúc mở. Mặc dù, các giới hạn khá lớn, tuỳ thuộc khá nhiều vào lượng bộ nhớ đang có, ta phảI báo cho Visual Basic biết phảI chừa riêng một lượng bộ nhớ là bao nhiêu cho mảng trước khi dùng nó.
Có hai kiểu mảng trong Visual Basic: mảng cố định [fixed array], ở đó việc phân bổ bộ nhớ không bao giờ thay đổI trong khi đang chạy chương trình, và mảng động [dynamic arrays], ở đó có thể thay đổI kích cỡ ngay khi chạy chương trình.
Ưu điểm của mảng cố định là: do bộ nhớ được chừa riêng ngay tạI đầu chương trình, ta hiếm khi gặp sự cố cạn kiệt bộ nhớ trong khi chương trình đang chạy.
Ưu điểm của mảng động là: Khả năng linh hoạt của chúng; có thể thay đổI kích cớ để đáp ứng những gì mà chương trình thường gặp.
Có thể cả mảng động và mảng cố định sẵn dùng cho toàn bộ ứng dụng, cho một Form hay một module cụ thể, hoặc chỉ trong phạm vi của một thủ tục hay hàm.
Khi dùng mảng bao giờ cũng phảI khai báo sao cho số lượng cần phảI vừa đủ theo yêu cầu ứng dụng cần xây dựng chương trình, không nên lãng phí bộ nhớ. Tuy nhiên có nhiều trường hợp kích thước mảng phụ thuộc lúc chương trình thực hiện (run – time), chúng ta không thể xác định trước được. Visual Basic cung cấp một khả năng đáp ứng trường hợp này: khai báo mảng kích thước thay đổI - mảng động.
Ví dụ sau khi khai báo mảng động:
Sub cmdArray 1_Click() Dim Counter
‘ khai báo mảng Array 1 là mảng động Static Array 1() As Integer
‘ Thay đổI kích thước mảng Array 1
ReDim Array 1( 1 to 15) As Integer
For Counter = 1 to 15
Array 1( Counter) = Counter Next.
Thay đổI lạI kích thước mảng Array 1 ReDim Array 1( 1 to 5) As Integer End Sub
Đầu tiên khi khai báo
Static Array 1() As Integer.
Kích thước mảng Array 1 chưa xác định. Lệnh sau sẽ cố định mảng Array 1 có 15 phần tử:
ReDim Array 1( 1 to 15) As Integer
Sau một số xử lý ( ví dụ gán giá trị cho 15 phần tử ), mảng Array 1 được cố địng lạI chỉ còn 5 phần tử
ReDim Array 1(1 to 5) As Integer
Một lưu ý khi thay đổI kích thước mảng, các nộI dung cũ sẽ bị mất,nếu ta muốn giữu lạI giá trị cũ của 5 phần tử còn lạI sau khi thay đổI, ta cần viết lạI như sau:
ReDim Preserve Array 1( 1 to 5) As Integer.
5. Dùng danh sách và mảng vớI các thủ tục và hàm
Visual Basic có một đặc phận tuyệt vờI để dùng các danh sách và các mảng trong các thủ tục và các hàm. Không như nhiều ngôn ngữ khác, Visual Basic dễ dàng gởI cho thủ tục các danh sách hay mảng có kích cỡ bất kỳ. Các mảng luôn được chuyển theo tham chiếu. Điều này có nghĩa là mọI thay đổI đã tạo cho mảng hay cho các khoản nhập trong mảng vẫn trường tồn cả khi Visual Basic rờI hàm thủ tục đó.
Tất nhiên để mảng chuyển theo tham chiếu có nghĩa là ta chẳng cần dùng các mảng cấp Form trừ khi muốn mảng sẵn dùng khắp nơi. Để gửi một tham số mảng cho một thủ tục hay hàm, ta chỉ việc dùng tên mảng theo sau là các dấu ngoặ đơn mở và đóng (), trong danh sách các tham số
TẬP TIN TRUY CẬP TUẦN TỰ
Khi truy xuất tập tin từ đầu theo từng dòng văn bản, tập tin như thế được gọI là tập tin truy xuất tuần tự .
Ta có thể mở tập tin theo kiểu truy xuất tuần tự theo ba cách.
- Cách1: Output - Cách 2: Append - Cách 3: Input.
6.Mở tập tin theo kiểu truy xuất tuần tự bằng Output
Dùng kiểu Output tạo tập tin truy cập tuần tự. Sau khi tạo tập tin, ta có thể dùng các lệnh xuất để viết tên tập tin này. Ví dụ sau tạo tập tin TRY.TXT:
FileNum = FreeFile
Open “TRY.TXT” For Output As FileNum.
Nếu tập tin TRY.TXT đã tồn tạI, nộI dung cũ bị xóa đi! Tập tin TRY.TXT không có đường dẫn nên có được tạo trong thư mục hiện hành. Muốn tạo ở thư mục xác định nào đó ( ví dụ C:\ PROG), ta cần chỉ rõ như sau:
Open “ C:\PROG\TRY.TXT” For Output As FileNum.
Tập tin mở bằng kiểu Output chỉ cho phép ta viết lên mà thôi. Ta có thể viết bằng phát biểu Print#.
FileNum = FreeFile
Open “ TRY.TXT” For Output As FileNum
‘ Viết nộI dung thuộc tính Text cuat MyText ra
‘ TRY.TXT
Print # FileNum, txtMyText.Text
‘Đóng tập tin TRY.TXT Close FileNum.
Phát biểu Print cần hai tham số. Tham số thứ nhất là thẻ File cần nghi ra và tham số thứ hai là chuỗI cần nghi.
7. Mở tập tin theo kiểu truy xuất tuần tự bằng Append:
Kiểu Append tương tự như Output nhưng điểm khác chính là khi tập tin được mở đã tồn tạI, nộI dung cũ không bị xoá. Gỉa sử tập tin TRY.TXT đang có sẵn hai dòng:
THIS IS LINE NUMBER 1 THIS IS LINE NUMBER 2 Mở TRY.TXT theo kiểu Append:
FileNum = FreeFile
Open “ TRY.TXT” For Append As FileNum Print # FileNum, “THIS IS A NEW LINE”
Close FileNum.
Bây giờ TRY.TXT chứa:
THIS IS LINE NUMBER 1 THIS IS LINE NUMBER 2 THIS IS A NEW LINE
Nếu đoạn lệnh trên thực hiện một lần nữa, TRY.TXT chứa THIS IS LINE NUMBER I
THIS IS LINE NUMBER 2 THIS IS A NEW LINE THIS IS A NEW LINE
8. Mở tập tin theo kiểu truy xuất tuần tự bằng Output
Khi cần đọc tập tin truy xuất tuần từ, ta cần mở tập tin theo kiểu Input. Sau đó, dùng hàm Input$ ()để đọc. Ví dụ, sau khi mở TRY.TXT theo kiểu Input và đọc vào txtMytext:
FileNum = FreeFile
Open “ TRY. TXT” For Input As FileNum Open “ TRY.TXT “ For Input As FileNum.
‘Đọc vào toàn bộ TRY.TXT thuộc tính Text của
‘ txtMytext
txtMytext.Text = Input$ (LÒ (FileNum), FileNum)
‘Đóng tập tin TRY.TXT Close FileNum.
Hàm Input$ () cần hai tham số. Tham số thứ nhất xác định số Byte cần đọc, tham số thứ hai là thẻ file
9. Phát biểu Write # và Input #
Cách khác thay cho Print # và Input$ () trong viẹc ghi/đọc là Write# và Input#.
Phát biểu Write# cho phép ghi một loạt các biến ( dạng chuỗI hay số ). Ví dụ sau viết hai biến MyString và MyNumber ra tập tin TRY.TXT:
FileNum = FreeFile
Open “ TRY.TXT” For OUTPUT As FileNum Write#FilenNum MyString, MyNumBer Close FileNumber.
Phát biểu Input# dùng đọc tập tin nộI dung trở vào các biến. Ví dụ đọc lạI giá trị ghi trở lạI các biến MyString và MyNumber:
FileNum = FreeFile
Open “ TRY.TXT” For Input As FileNum Input# FileNum MyString, MyNumBer Close FileNum