bÀi 7: thao tác với file - các vấn đề khác - giáo trình fpt
DESCRIPTION
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 độngTRANSCRIPT
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 SubTham số OptionalPhạ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 minhSử 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 SubTham số OptionalPhạ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 minhSử 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ậptuần tựBiết cách sử dụng điều khiển OpenFileDialogBiết cách sử dụng điều khiển MonthCalendarBiết cách sử dụng điều khiển MenuStripBiế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ậptuần tựBiết cách sử dụng điều khiển OpenFileDialogBiết cách sử dụng điều khiển MonthCalendarBiết cách sử dụng điều khiển MenuStripBiế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 ứngdụng đã kết thúcFile đượ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 USBVisual cung cấp các thao tác tạo, đọc và ghi dữ liệu vàoFile
File
File là một tập hợp dữ liệu được lưu lại ngay cả khi ứngdụng đã kết thúcFile đượ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 USBVisual cung cấp các thao tác tạo, đọc và ghi dữ liệu vàoFile
Thao tác với File truy cập tuần tự 4
File được lưutrên ổ cứng
Dữ liệu trênFile được đọc
vào RAM
CPU thao tác vớidữ 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ó đượcghi 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ênLà 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ó đượcghi 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ênLà 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ậptuần tự
Truy cậpngẫu nhiên
Các phần tử được xử lý bởi máy tính là một hệ thốngphân cấp dữ liệuCá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ốngphân cấp dữ liệuCá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
BitPhần tử nhỏ nhất mà máy tính xử lýChỉ lưu giá trị 0 hoặc 1Má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)
ByteTập hợp gồm 8 bitTrong Visual Basic, mỗi ký tự gồm 2 byteLập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tínhthao tác trên chuỗi bit
Hệ thống phân cấp dữ liệu
BitPhần tử nhỏ nhất mà máy tính xử lýChỉ lưu giá trị 0 hoặc 1Má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)
ByteTập hợp gồm 8 bitTrong Visual Basic, mỗi ký tự gồm 2 byteLập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tínhthao tác trên chuỗi bit
Thao tác với File truy cập tuần tự 8
TrườngTập hợp các ký tự có thể truyền đạt ý nghĩaVí dụ như trường lưu tên
Bản ghiLà tập hợp các trường có liên quanVí dụ như trường lưu thông tin về điểm cho một sinh viên
FileLà tập hợp các bản ghi có liên quanVí 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ọnlàm khóa bản ghi (ví dụ như mã số sinh viên)
Cơ sở dữ liệuLà một nhóm file có liên quan
Hệ thống phân cấp dữ liệu
TrườngTập hợp các ký tự có thể truyền đạt ý nghĩaVí dụ như trường lưu tên
Bản ghiLà tập hợp các trường có liên quanVí dụ như trường lưu thông tin về điểm cho một sinh viên
FileLà tập hợp các bản ghi có liên quanVí 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ọnlàm khóa bản ghi (ví dụ như mã số sinh viên)
Cơ sở dữ liệuLà 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 FileKhi một file được mở, một luồng được gắn vào đối tượngfile để “đổ” thông tin vào File hay “hút” dữ liệu từ fileCác lớp xử lý luồng được lưu trong namespaceSystem.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 FileKhi một file được mở, một luồng được gắn vào đối tượngfile để “đổ” thông tin vào File hay “hút” dữ liệu từ fileCác lớp xử lý luồng được lưu trong namespaceSystem.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ệusẽ được ghi ra
Mục đích là để báorằng muốn thêm thôngtin vào cuối file
Ghi dữ liệu ra filePhương thức Write
Ghi giá trị đối số của nó ra file
Phương thức WriteLineGhi 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 filePhương thức Write
Ghi giá trị đối số của nó ra file
Phương thức WriteLineGhi 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ệnhWrite hay WriteLineDữ liệu được đọc ra file theo từng khốiKhi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lạira 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ệnhWrite hay WriteLineDữ liệu được đọc ra file theo từng khốiKhi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lạira 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 fileCố 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ừ filePhươ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 fileSử dụng phương thức EndOfStream để xác định đã đếncuố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ừ filePhươ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 fileSử dụng phương thức EndOfStream để xác định đã đếncuối file hay chưa
Thao tác với File truy cập tuần tự 15
Dim line As StringDo 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ạitrên ToolBox
Thao tác với File truy cập tuần tự 16
Thêm OpenFileDialog vào FormOpenFileDialog
Thêm OpenFileDialog vào FormHiển thị hộp thoại cho người dùng chọn file khi Click vàomộ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àoSử dụng đối tượng DialogResult để lấy kết quả trả về từphương thức ShowDialog
Hiển thị tên fileSử dụng thuộc tính FileName để lấy tên file được chọnDùng MessageBox để hiển thị tên file
Demo sử dụng hộp thoại OpenFileDialog
Thêm OpenFileDialog vào FormHiển thị hộp thoại cho người dùng chọn file khi Click vàomộ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àoSử dụng đối tượng DialogResult để lấy kết quả trả về từphương thức ShowDialog
Hiển thị tên fileSử dụng thuộc tính FileName để lấy tên file được chọnDùng MessageBox để hiển thị tên file
Thao tác với File truy cập tuần tự 17
Sự kiệnDateChanged - Được thực thi khi một ngày (hoặc mộtkhoảng ngày tháng) mới được chọn.
Thuộc tínhName - Xác định tên được dùng để truy cập các thuộctính của điều khiển MonthCalendar trong mã của ứngdụng. Tên nên có hậu tố MonthCalendar.SelectionStart - trả về ngày được chọn đầu tiên (hoặcduy nhất).
Điều khiển MonthCalendar
Sự kiệnDateChanged - Được thực thi khi một ngày (hoặc mộtkhoảng ngày tháng) mới được chọn.
Thuộc tínhName - Xác định tên được dùng để truy cập các thuộctính của điều khiển MonthCalendar trong mã của ứngdụng. Tên nên có hậu tố MonthCalendar.SelectionStart - trả về ngày được chọn đầu tiên (hoặcduy 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 OpenDim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button CancelIf ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọnDim tenfile As String = openFileDialog.FileName
‘hiển thị tên fileMessageBox.Show(tenfile)
End IfEnd 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 OpenDim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button CancelIf ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọnDim tenfile As String = openFileDialog.FileName
‘hiển thị tên fileMessageBox.Show(tenfile)
End IfEnd Sub ' openFileButton_Click
Hiển thị lịch, từ đó người dùng có thể chọn một ngàyhoặc một khoảng ngày tháng
Điều khiển MonthCalendar
Ký hiệu MonthCalendartrên ToolBox
Thao tác với File truy cập tuần tự 20
Ký hiệu MonthCalendartrên ToolBox
Thêm điều khiển vàoForm
Tiện ích đồng hồ trên Win7
Thêm MonthCalendar vào FormXử 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 MonthCalendarPrivate 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ọnMessageBox.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 MonthCalendarPrivate 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ọnMessageBox.Show(dateMonthCalendar.SelectionStart)
End Sub ' dateMonthCalendar_DateChanged
Dùng để nhóm các chức năng liên quan trong ứng dụngWindows
Menu
Thao tác với File truy cập tuần tự 22
Thêm MenuStrip vào FormThiết kế MenuXử 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 đượcthê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ểnthị hộp chọn
font
Xử lý sự kiện khi nhấn vào mục Color…
Thao tác với File truy cập tuần tự 26
Mở hộp thoạiColor Dialog
Khai báo mảng không khởi tạo phần tửDim arr As ArrayDim int() As Integer = {12, 16, 20, 24, 28, 32}arr = CType(int, Array)
Khai báo mảng có khởi tạo phần tửDim MangSo() As Integer = {12, 24, 36, 48}Dim MangKyTu() As String = {"K", "S", "S", "D", "N"}Dim MangDoiTuong() As Object = {"this", ”a”}Dim objArray() As Object
Mảng và các cách khai báo
Khai báo mảng không khởi tạo phần tửDim arr As ArrayDim int() As Integer = {12, 16, 20, 24, 28, 32}arr = CType(int, Array)
Khai báo mảng có khởi tạo phần tửDim MangSo() As Integer = {12, 24, 36, 48}Dim MangKyTu() As String = {"K", "S", "S", "D", "N"}Dim MangDoiTuong() As Object = {"this", ”a”}Dim objArray() As Object
Thao tác với File truy cập tuần tự 27
Ta sử dụng vòng lặp để đọc dữ liệu từ mảngDim sourceArray() As Integer = {1, 2, 3}
Dim counter As IntegerFor counter = 0 To sourceArray.Length - 1
result.Append(sourceArray(counter).ToString())Next counter
Đọc dữ liệu từ mảng
Ta sử dụng vòng lặp để đọc dữ liệu từ mảngDim sourceArray() As Integer = {1, 2, 3}
Dim counter As IntegerFor counter = 0 To sourceArray.Length - 1
result.Append(sourceArray(counter).ToString())Next counter
Thao tác với File truy cập tuần tự 28
Ta sử dụng InsertArrayElement để thêm dữ liệuvào mảng
Dim arrayInsert() As String = {"O", "A", "G", "B", "B"}
InsertArrayElement(Of String)(arrayInsert, 2, “Chanh")
Thêm dữ liệu vào mảng
Thao tác với File truy cập tuần tự 29
Khai báo dữ liệu kiểu cấu trúcStructure Person
Dim strLastName As StringDim strFirstName As StringDim strPhone As String
End Structure
Gán dữ liệu cho kiểu dữ liệu cấu trúcDim udtPerson As New Person
With udtPerson.strLastName = “Nguyen Van".strFirstName = “A".strPhone = "555"
End With
Dữ liệu kiểu cấu trúc
Khai báo dữ liệu kiểu cấu trúcStructure Person
Dim strLastName As StringDim strFirstName As StringDim strPhone As String
End Structure
Gán dữ liệu cho kiểu dữ liệu cấu trúcDim udtPerson As New Person
With udtPerson.strLastName = “Nguyen Van".strFirstName = “A".strPhone = "555"
End With
Thao tác với File truy cập tuần tự 30
Khai báo ArrayListDim alPersons As New ArrayList
Thêm dữ liệu vào ArrayListalPersons.Add(udtPerson)
Insert dữ liệu vào một vị trí bất kỳ trong ArrayListIf Not alPersons.Contains(udtPerson) Then
alPersons.Insert(1, udtPerson)End If
Xóa dữ liệu từ ArrayListalPersons.RemoveAt(0)
Thêm, xóa dữ liệu từ ArrayList
Khai báo ArrayListDim alPersons As New ArrayList
Thêm dữ liệu vào ArrayListalPersons.Add(udtPerson)
Insert dữ liệu vào một vị trí bất kỳ trong ArrayListIf Not alPersons.Contains(udtPerson) Then
alPersons.Insert(1, udtPerson)End If
Xóa dữ liệu từ ArrayListalPersons.RemoveAt(0)
Thao tác với File truy cập tuần tự 31
Public Class Form1Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.ClickDim i As IntegerDim ItemList As New ArrayList()ItemList.Add("Item4")ItemList.Add("Item5")ItemList.Add("Item2")ItemList.Add("Item1")ItemList.Add("Item3")MsgBox("Shows Added Items")For i = 0 To ItemList.Count - 1
MsgBox(ItemList.Item(i))Next'insert an itemItemList.Insert(3, "Item6")'sort itemms in an arraylistItemList.Sort()
Ví dụ về ArrayList
Public Class Form1Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.ClickDim i As IntegerDim ItemList As New ArrayList()ItemList.Add("Item4")ItemList.Add("Item5")ItemList.Add("Item2")ItemList.Add("Item1")ItemList.Add("Item3")MsgBox("Shows Added Items")For i = 0 To ItemList.Count - 1
MsgBox(ItemList.Item(i))Next'insert an itemItemList.Insert(3, "Item6")'sort itemms in an arraylistItemList.Sort()
Thao tác với File truy cập tuần tự 32
'remove an itemItemList.Remove("Item1")'remove item from a specified indexItemList.RemoveAt(3)MsgBox("Shows final Items the ArrayList")For i = 0 To ItemList.Count - 1
MsgBox(ItemList.Item(i))Next
End SubEnd Class
Ví dụ về ArrayList
'remove an itemItemList.Remove("Item1")'remove item from a specified indexItemList.RemoveAt(3)MsgBox("Shows final Items the ArrayList")For i = 0 To ItemList.Count - 1
MsgBox(ItemList.Item(i))Next
End SubEnd Class
Thao tác với File truy cập tuần tự 33
Các phần tử được xử lý bởi máy tính là một hệ thốngphân cấp dữ liệu. Các phần tử phức tạp được cấu thànhtừ các phần tử đơn giản hơnBit là phần tử nhỏ nhất mà máy tính xử lýFile là một tập dữ liệu được lưu lại ngay cả khi ứng dụngkết thúc. File được lưu trên thiết bị lưu trữ thứ cấpDữ liệu từ file được đọc vào RAM, sau đó CPU xử lý dữliệu trên RAMFile được phân làm hai loại, file truy cập ngẫu nhiên vàfile truy cập tuần tựVisual Basic cung cấp luồng để hỗ trợ việc đọc và ghifile. Sử dụng StreamWriter để ghi dữ liệu vào file vàStreamReader để đọc dữ liệu từ file
Tổng kết bài học
Các phần tử được xử lý bởi máy tính là một hệ thốngphân cấp dữ liệu. Các phần tử phức tạp được cấu thànhtừ các phần tử đơn giản hơnBit là phần tử nhỏ nhất mà máy tính xử lýFile là một tập dữ liệu được lưu lại ngay cả khi ứng dụngkết thúc. File được lưu trên thiết bị lưu trữ thứ cấpDữ liệu từ file được đọc vào RAM, sau đó CPU xử lý dữliệu trên RAMFile được phân làm hai loại, file truy cập ngẫu nhiên vàfile truy cập tuần tựVisual Basic cung cấp luồng để hỗ trợ việc đọc và ghifile. Sử dụng StreamWriter để ghi dữ liệu vào file vàStreamReader để đọc dữ liệu từ file
Thao tác với File truy cập tuần tự 34
Hãy nhớ đóng file sau khi đã thao tác xong với file đểtránh lỗi xẩy raHộp thoại OpenFileDialog để mở fileĐiều khiển MonthCalender hiển thị lịch, từ đó ngườidùng có thể chọn một ngày hoặc một khoảng ngàythángĐiều khiển MenuStrip để thiết kế menuMảng và mảng động
Tổng kết bài học
Hãy nhớ đóng file sau khi đã thao tác xong với file đểtránh lỗi xẩy raHộp thoại OpenFileDialog để mở fileĐiều khiển MonthCalender hiển thị lịch, từ đó ngườidùng có thể chọn một ngày hoặc một khoảng ngàythángĐiều khiển MenuStrip để thiết kế menuMảng và mảng động
Thao tác với File truy cập tuần tự 35