BÀI 7:
THAO TÁC VỚI FILE – CÁC VẤN ĐỀ KHÁC
Tổ chức ứng dụng, khái niệm “chia để trị”
Khái niệm về thủ tục, sử dụng thủ tục Function và thủ
tục Sub
Tham số Optional
Phạm vị biến
Ép kiểu ngầm định thu hẹp và sử dụng lớp Convert để
ép kiểu tường minh
Sử dụng các tùy chọn của trình gỡ lỗi
Hệ thống bài cũ
Tổ chức ứng dụng, khái niệm “chia để trị”
Khái niệm về thủ tục, sử dụng thủ tục Function và thủ
tục Sub
Tham số Optional
Phạm vị biến
Ép kiểu ngầm định thu hẹp và sử dụng lớp Convert để
ép kiểu tường minh
Sử dụng các tùy chọn của trình gỡ lỗi
Thao tác với File truy cập tuần tự
2
Mục tiêu bài học
Hiểu về hệ thống phân cấp dữ liệu mà máy tính xử lý
Hiểu về file, biết cách đọc và ghi dữ liệu từ file truy cập
tuần tự
Biết cách sử dụng điều khiển OpenFileDialog
Biết cách sử dụng điều khiển MonthCalendar
Biết cách sử dụng điều khiển MenuStrip
Biết cách sử dụng mảng và mảng động
Hiểu về hệ thống phân cấp dữ liệu mà máy tính xử lý
Hiểu về file, biết cách đọc và ghi dữ liệu từ file truy cập
tuần tự
Biết cách sử dụng điều khiển OpenFileDialog
Biết cách sử dụng điều khiển MonthCalendar
Biết cách sử dụng điều khiển MenuStrip
Biết cách sử dụng mảng và mảng động
Thao tác với File truy cập tuần tự
3
File là một tập hợp dữ liệu được lưu lại ngay cả khi ứng
dụng đã kết thúc
File được lưu trữ trên các phương tiện thứ cấp như ổ
cứng máy tính, CD-ROM, DVD hay USB
Visual cung cấp các thao tác tạo, đọc và ghi dữ liệu vào
File
File
File là một tập hợp dữ liệu được lưu lại ngay cả khi ứng
dụng đã kết thúc
File được lưu trữ trên các phương tiện thứ cấp như ổ
cứng máy tính, CD-ROM, DVD hay USB
Visual cung cấp các thao tác tạo, đọc và ghi dữ liệu vào
File
Thao tác với File truy cập tuần tự
4
File được lưu
trên ổ cứng
Dữ liệu trên
File được đọc
vào RAM
CPU thao tác với
dữ liệu trên RAM
File truy cập tuần tự
Là file mà thông tin được đọc ra theo thứ tự mà nó được
ghi vào trước đó
Bài này sẽ giới thiệu về cách đọc và ghi file tuần tự
File truy cập ngẫu nhiên
Là file mà thông tin được đọc ra theo thứ tự ngẫu nhiên
File truy cập tuần tự
và File truy cập ngẫu nhiên
File truy cập tuần tự
Là file mà thông tin được đọc ra theo thứ tự mà nó được
ghi vào trước đó
Bài này sẽ giới thiệu về cách đọc và ghi file tuần tự
File truy cập ngẫu nhiên
Là file mà thông tin được đọc ra theo thứ tự ngẫu nhiên
Thao tác với File truy cập tuần tự
5
1
2
3
4
5
6
7
1
2
3
4
5
6
7
Truy cập
tuần tự
Truy cập
ngẫu nhiên
Các phần tử được xử lý bởi máy tính là một hệ thống
phân cấp dữ liệu
Các phần tử phức tạp được cấu thành từ các phần tử
đơn giản hơn
Hệ thống phân cấp dữ liệu
Các phần tử được xử lý bởi máy tính là một hệ thống
phân cấp dữ liệu
Các phần tử phức tạp được cấu thành từ các phần tử
đơn giản hơn
Thao tác với File truy cập tuần tự
6
Hệ thống được tổ chức như hình sau
Hệ thống phân cấp dữ liệu
Nam
F
D
F
B
Kien
A
A
D
E
Nga
A
B
A
D
Minh
A
A
A
F
file
01000101
Thao tác với File truy cập tuần tự
7
Minh
A
A
A
F
Kien
A
A
D
E
0100010101010100
K i e n
1 bit
trường
2 byte
bản ghi
1 byte
Bit
Phần tử nhỏ nhất mà máy tính xử lý
Chỉ lưu giá trị 0 hoặc 1
Máy tính thực hiện thao tác đơn giản trên bit (kiểm tra giá trị
của bit, gán giá trị cho bit, đảo giá trị bit)
Byte
Tập hợp gồm 8 bit
Trong Visual Basic, mỗi ký tự gồm 2 byte
Lập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tính
thao tác trên chuỗi bit
Hệ thống phân cấp dữ liệu
Bit
Phần tử nhỏ nhất mà máy tính xử lý
Chỉ lưu giá trị 0 hoặc 1
Máy tính thực hiện thao tác đơn giản trên bit (kiểm tra giá trị
của bit, gán giá trị cho bit, đảo giá trị bit)
Byte
Tập hợp gồm 8 bit
Trong Visual Basic, mỗi ký tự gồm 2 byte
Lập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tính
thao tác trên chuỗi bit
Thao tác với File truy cập tuần tự
8
Trường
Tập hợp các ký tự có thể truyền đạt ý nghĩa
Ví dụ như trường lưu tên
Bản ghi
Là tập hợp các trường có liên quan
Ví dụ như trường lưu thông tin về điểm cho một sinh viên
File
Là tập hợp các bản ghi có liên quan
Ví dụ như file lưu thông tin về điểm cho một lớp học
Để lấy bản ghi dễ dàng, một trường trong bản ghi được chọn
làm khóa bản ghi (ví dụ như mã số sinh viên)
Cơ sở dữ liệu
Là một nhóm file có liên quan
Hệ thống phân cấp dữ liệu
Trường
Tập hợp các ký tự có thể truyền đạt ý nghĩa
Ví dụ như trường lưu tên
Bản ghi
Là tập hợp các trường có liên quan
Ví dụ như trường lưu thông tin về điểm cho một sinh viên
File
Là tập hợp các bản ghi có liên quan
Ví dụ như file lưu thông tin về điểm cho một lớp học
Để lấy bản ghi dễ dàng, một trường trong bản ghi được chọn
làm khóa bản ghi (ví dụ như mã số sinh viên)
Cơ sở dữ liệu
Là một nhóm file có liên quan
Thao tác với File truy cập tuần tự
9
Visual Basic cung cấp đối tượng luồng (stream) để hỗ
trợ cho việc đọc và ghi thông tin vào File
Khi một file được mở, một luồng được gắn vào đối tượng
file để “đổ” thông tin vào File hay “hút” dữ liệu từ file
Các lớp xử lý luồng được lưu trong namespace
System.IO
File và luồng
Visual Basic cung cấp đối tượng luồng (stream) để hỗ
trợ cho việc đọc và ghi thông tin vào File
Khi một file được mở, một luồng được gắn vào đối tượng
file để “đổ” thông tin vào File hay “hút” dữ liệu từ file
Các lớp xử lý luồng được lưu trong namespace
System.IO
Thao tác với File truy cập tuần tự
10
Thêm namespace System.IO
Khai báo biến StreamWriter
Khởi tạo giá trị cho đối tượng StreamWriter
Nếu tham số thứ hai là False, nội dung có sẵn trong file
(nếu file tồn tại) sẽ được xóa hết
Demo ghi dữ liệu ra file
Imports System.IO
Dim output As StreamWriter
output = New StreamWriter (“calendar.txt”, True)
Thêm namespace System.IO
Khai báo biến StreamWriter
Khởi tạo giá trị cho đối tượng StreamWriter
Nếu tham số thứ hai là False, nội dung có sẵn trong file
(nếu file tồn tại) sẽ được xóa hết
Thao tác với File truy cập tuần tự
11
output = New StreamWriter (“calendar.txt”, True)
Tên file mà dữ liệu
sẽ được ghi ra
Mục đích là để báo
rằng muốn thêm thông
tin vào cuối file
Ghi dữ liệu ra file
Phương thức Write
Ghi giá trị đối số của nó ra file
Phương thức WriteLine
Ghi giá trị đối số ra file, kèm theo là một ký tự xuống dòng
Đóng StreamWriter
Demo ghi dữ liệu ra file
output.Write(“Hello!”)
Ghi dữ liệu ra file
Phương thức Write
Ghi giá trị đối số của nó ra file
Phương thức WriteLine
Ghi giá trị đối số ra file, kèm theo là một ký tự xuống dòng
Đóng StreamWriter
Thao tác với File truy cập tuần tự
12
output.WriteLine(“How are you?”)
output.Close()
Cơ chế ghi
Ứng dụng không đọc dữ liệu ra file ngay khi thực hiện lệnh
Write hay WriteLine
Dữ liệu được đọc ra file theo từng khối
Khi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lại
ra file
Không đóng file sau khi ghi có thể làm mất dữ liệu
Cơ chế đọc và ghi ra file
Cơ chế ghi
Ứng dụng không đọc dữ liệu ra file ngay khi thực hiện lệnh
Write hay WriteLine
Dữ liệu được đọc ra file theo từng khối
Khi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lại
ra file
Không đóng file sau khi ghi có thể làm mất dữ liệu
Thao tác với File truy cập tuần tự
13
<Title>
13
Cơ chế đọc
Ứng dụng đọc từng khối dữ liệu từ file vào RAM
Tại một thời điểm, chỉ một ứng dụng truy cập đến file
Cố gắng mở một file đang mở sẽ gây lỗi
Phải đóng file ngay sau khi sử dụng xong
Cơ chế đọc và ghi ra file
Thao tác với File truy cập tuần tự
14
Thêm namespace System.IO
Khai báo khởi tạo biến StreamReader
Đọc dữ liệu từ file
Phương thức ReadLine đọc một dòng văn bản và trả về
String. Trả về Nothing nếu đã đến cuối file
Sử dụng phương thức EndOfStream để xác định đã đến
cuối file hay chưa
Demo đọc dữ liệu từ file
Imports System.IO
Dim input As StreamReader= New StreamReader (“calendar.txt”)
Thêm namespace System.IO
Khai báo khởi tạo biến StreamReader
Đọc dữ liệu từ file
Phương thức ReadLine đọc một dòng văn bản và trả về
String. Trả về Nothing nếu đã đến cuối file
Sử dụng phương thức EndOfStream để xác định đã đến
cuối file hay chưa
Thao tác với File truy cập tuần tự
15
Dim line As String
Do Until input.EndOfStream
line = input.Realine()
MessageBox.Show(line)
Loop
Là hộp thoại để mở file
Hộp thoại OpenFileDialog
Ký hiệu hộp thoại
trên ToolBox
Thao tác với File truy cập tuần tự
16
Thêm OpenFileDialog vào Form
OpenFileDialog
Thêm OpenFileDialog vào Form
Hiển thị hộp thoại cho người dùng chọn file khi Click vào
một Button trên Form
Sử dụng phương thức ShowDialog để hiển thị hộp thoại,
kết quả trả về từ phương thức này cho biết người dùng đã
nhấn vào Button nào
Sử dụng đối tượng DialogResult để lấy kết quả trả về từ
phương thức ShowDialog
Hiển thị tên file
Sử dụng thuộc tính FileName để lấy tên file được chọn
Dùng MessageBox để hiển thị tên file
Demo sử dụng hộp thoại OpenFileDialog
Thêm OpenFileDialog vào Form
Hiển thị hộp thoại cho người dùng chọn file khi Click vào
một Button trên Form
Sử dụng phương thức ShowDialog để hiển thị hộp thoại,
kết quả trả về từ phương thức này cho biết người dùng đã
nhấn vào Button nào
Sử dụng đối tượng DialogResult để lấy kết quả trả về từ
phương thức ShowDialog
Hiển thị tên file
Sử dụng thuộc tính FileName để lấy tên file được chọn
Dùng MessageBox để hiển thị tên file
Thao tác với File truy cập tuần tự
17
Sự kiện
DateChanged - Được thực thi khi một ngày (hoặc một
khoảng ngày tháng) mới được chọn.
Thuộc tính
Name - Xác định tên được dùng để truy cập các thuộc
tính của điều khiển MonthCalendar trong mã của ứng
dụng. Tên nên có hậu tố MonthCalendar.
SelectionStart - trả về ngày được chọn đầu tiên (hoặc
duy nhất).
Điều khiển MonthCalendar
Sự kiện
DateChanged - Được thực thi khi một ngày (hoặc một
khoảng ngày tháng) mới được chọn.
Thuộc tính
Name - Xác định tên được dùng để truy cập các thuộc
tính của điều khiển MonthCalendar trong mã của ứng
dụng. Tên nên có hậu tố MonthCalendar.
SelectionStart - trả về ngày được chọn đầu tiên (hoặc
duy nhất).
Thao tác với File truy cập tuần tự
18
Demo sử dụng hộp thoại OpenFileDialog
Private Sub openFileButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles openFileButton.Click
' hiển thị hộp thoại Open
Dim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button Cancel
If ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọn
Dim tenfile As String = openFileDialog.FileName
‘hiển thị tên file
MessageBox.Show(tenfile)
End If
End Sub ' openFileButton_Click
Thao tác với File truy cập tuần tự
19
Private Sub openFileButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles openFileButton.Click
' hiển thị hộp thoại Open
Dim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button Cancel
If ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọn
Dim tenfile As String = openFileDialog.FileName
‘hiển thị tên file
MessageBox.Show(tenfile)
End If
End Sub ' openFileButton_Click
Hiển thị lịch, từ đó người dùng có thể chọn một ngày
hoặc một khoảng ngày tháng
Điều khiển MonthCalendar
Ký hiệu MonthCalendar
trên ToolBox
Thao tác với File truy cập tuần tự
20
Ký hiệu MonthCalendar
trên ToolBox
Thêm điều khiển vào
Form
Tiện ích đồng hồ trên Win7
Thêm MonthCalendar vào Form
Xử lý sự kiện DateChanged cho điều khiển này
Khi người dùng chọn ngày thì sẽ hiển thị ngày vừa chọn
Demo sử dụng MonthCalendar
' xử lý sự kiện DateChanged của MonthCalendar
Private Sub dateMonthCalendar_DateChanged( _
ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.DateRangeEventArgs) _
Handles dateMonthCalendar.DateChanged
' hiển thị ngày vừa được chọn
MessageBox.Show(dateMonthCalendar.SelectionStart)
End Sub ' dateMonthCalendar_DateChanged
Thao tác với File truy cập tuần tự
21
' xử lý sự kiện DateChanged của MonthCalendar
Private Sub dateMonthCalendar_DateChanged( _
ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.DateRangeEventArgs) _
Handles dateMonthCalendar.DateChanged
' hiển thị ngày vừa được chọn
MessageBox.Show(dateMonthCalendar.SelectionStart)
End Sub ' dateMonthCalendar_DateChanged
Dùng để nhóm các chức năng liên quan trong ứng dụng
Windows
Menu
Thao tác với File truy cập tuần tự
22
Thêm MenuStrip vào Form
Thiết kế Menu
Xử lý sự kiện khi nhấn vào mục Menu
Demo sử dụng MenuStrip
Thao tác với File truy cập tuần tự
23
Thêm MenuStrip vào Form
Thao tác với File truy cập tuần tự
24
MenuStrip được
thêm vào Form
Thiết kế MenuStrip
Color…để
hiển thị hộp
chọn màu
Thao tác với File truy cập tuần tự
25
Thiết kế MenuStrip
Color…để
hiển thị hộp
chọn màu
Font…để hiển
thị hộp chọn
font