計算機程式 Visual BASIC 程式設計 四海工商專校 電算中心 廖文淵 E-Mail: andres@sitc.edu.tw
Chapter 10 檔案 (Files) 1. 檔案的種類 2. 循序存取檔案 3. 隨機存取檔案 4. 二進位檔案 5. 磁碟清單方塊 (Drive List Box) 6. 目錄清單方塊 (Directory List Box) 7. 檔案清單方塊 (File List Box)
1. 檔案的種類 搜尋在磁碟上的相關位元組 當存取一檔案時,須假定位元組表示什麼 三種檔案存取型態: 字元、資料錄、整數、字串 循序型 適用於讀寫在連續區塊中的文字檔 隨機型 適用於讀寫有固定長度資料錄結構的文字檔或二進位檔案 二進位型 適用於讀寫任意有結構的檔案
循序和隨機存取檔案 循序存取檔案 隨機存取檔案 為普通的文字檔的使用設計 每一個字元假設為代表一個文字字元或文字格式序列 資料被儲存為 ANSI 字元 隨機存取檔案 由相同長度的資料集合物件組成 建立由各種各樣的欄位組成的資料錄 每個欄位可以有不同的資料型式,使用者可定義型態 資料作為二進位資訊儲存
二進位存取檔案 二進位存取 允許儲存所希望的資料 沒有資料型式或資料錄長度的含義 與隨機存取相似 為能夠正確地對它檢索必須精確地知道資料是如何寫輸出至檔案中的
檔案存取的陳述式和函數 陳述式與函數 循序型 隨機型 二進位型 Open X X X Close X X X Input( ) X X 陳述式與函數 循序型 隨機型 二進位型 Open X X X Close X X X Input( ) X X Input # X Line Input # X Print # X Get X X Put X X Type...End Type X Write # X
2. 循序存取檔案 處理只包含文字的檔案時 資料沒有分成資料錄 不太適於儲存很多數字 每一個字元假設為代表一個文字字元或文字格式序列 資料被儲存為 ANSI 字元 資料沒有分成資料錄 不太適於儲存很多數字 每個數字都按字串儲存 一個四位數將需要 4 個位元組的儲存空間 不是作為一個整數來儲存時只需 2 個位元組
開啟循序存取檔案 Open 陳述式語法: Input Output Append Open pathname For [Input | Output | Append] As filenumber [Len = buffersize] Input 自檔案輸入字元 該檔案必須已經存在,否則,會產生一個錯誤 Output 向檔案輸出字元 Append 把字元加輸出至檔案 當開啟一個不存在的檔案作為 Output 或 Append 時,Open 陳述式首先 建立該檔案,然後再開啟它
開啟循序存取檔案 Filenumber 選項 Len 引數 Close 陳述式 檔案代號 1-255 指定緩衝區的字元數 Close [filenumber] 關閉檔案
自檔案中讀取字串-- Line Input# Dim LinesFromFile, NextLine As String Do Until EOF(FileNum) Line Input #FileNum, NextLine LinesFromFile=LinesFromFile+NextLine+Chr(13)+Chr(10) Loop
Input # 陳述式、Input 函數 Input # 陳述式 Input 函數 向變數複製任意數量的字元,所給的變數大小要足夠大 讀取檔案中所寫的一列的數字和 / 或字串表示式 Input #FileNum, name, street, city, state, zip Input 函數 向變數複製任意數量的字元,所給的變數大小要足夠大 LinesFromFile = Input(LOF(FileNum), FileNum)
把字串寫入檔案 以循序 Output 或 Append 開啟它 使用 Print # 陳述式 Write # 陳述式 Print #FileNum, TheBox.Text Write # 陳述式 把一列數字和 / 或字串表示式寫入檔案 自動用逗號分開每個表示式 在字串表示式端放置引號 Dim AnyString As String, AnyNumber As Integer AnyString = "AnyCharacters" AnyNumber = 23445 Write #FileNum AnyString, AnyNumber
3. 隨機存取檔案 檔案中的位元組構成相同的一些資料錄,每個資 料錄包含一個或多個欄位 欄位的資料錄對應於使用者定義型態 檔案中的位元組構成相同的一些資料錄,每個資 料錄包含一個或多個欄位 欄位的資料錄對應於使用者定義型態 Type Person ID As Integer MonthlySalary As Currency LastReviewDate As Long FirstName As String * 15 LastName As String * 15 Title As String * 15 ReviewComments As String * 150 End Type
資料錄變數 在定義對應資料錄的型態以後,應接著宣告程式 需要的任何其它變數 處理作為隨機存取而開啟的檔案 '資料錄變數。 在定義對應資料錄的型態以後,應接著宣告程式 需要的任何其它變數 處理作為隨機存取而開啟的檔案 '資料錄變數。 Public Employee As Person '偵測目前資料錄。 Public Position As Long '檔案中最後那筆資料錄的編號。 Public LastRecord As Long
開啟隨機型存取檔案 Open 陳述式語法: Random Len = reclength 選擇性變數,為預設的存取型態 指定每個資料錄的尺寸 Open pathname [For Random] As filenumber Len = reclength Random 選擇性變數,為預設的存取型態 Len = reclength 指定每個資料錄的尺寸 reclength < 資料錄實際長度,則產生一錯誤 reclength > 資料錄實際長度,則資料錄可寫入 會浪費些磁碟空間
Example Dim FileNum As Integer, RecLength As Long, Employee As Person '計算每筆資料錄的長度。 RecLength = Len(Employee) '取出下一個可使用檔案編號。 FileNum = FreeFile '用 Open 陳述式開啟開新檔案。 Open "MYFILE.FIL" For Random As FileNum Len = RecLength
將資料錄讀至變數 Get 陳述式 Put 陳述式 將資料錄複製到變數 把資料錄新增或者取代到隨機型存取開啟的檔案 取代資料錄 Get FileNum, Position, Employee Put 陳述式 把資料錄新增或者取代到隨機型存取開啟的檔案 取代資料錄 Put #FileNum, Position, Employee
新增資料錄 使用 Put 陳述式,將 Position 變數的值設定為比 檔案中的資料錄數多 1 LastRecord = LastRecord + 1 Put #FileNum, LastRecord, Employee
4. 二進位檔案 寫入檔案時,使用變數是 Byte 資料型式的陣列 開啟二進位型存取的檔案 沒有指定 Len = reclength Open pathname For Binary As filenumber 沒有指定 Len = reclength 如果在二進位型存取的 Open 陳述式中包括資料錄長度,資料錄長度會被忽略
將資料錄讀至變數 Get 陳述式 Input 陳述式 字元數最大為65535 Get[#] FileNum, [Position], Employee Input 陳述式 Input[$] (字元數, FileNum) 字元數最大為65535
寫入二進位檔案 Put # 陳述式 Put #FileNum, [Position], variable_name
5. 磁碟清單方塊 (Drive List Box) 顯示使用者系統上的目前磁碟機 獲得駐點時,使用者可輸入任何有效的磁碟機識別符號, 或按一下磁碟機清單方塊右側的箭號 使用者指定新磁碟機後,這個磁碟機將出現在清單的頂端 Drive 屬性 並判斷目前選擇的磁碟機 Drive1.Drive = "c:\" ChDrive 陳述式 ChDrive Drive1.Drive
6. 目錄清單方塊 (Directory List Box) 從最高層目錄開始顯示使用者系統上的目前磁碟機目錄結 構 清單方塊中的每個目錄關連一個整數識別符號,可用它來 識別單個目錄 Path 屬性 (Dir1.Path) 指定的目錄 ListIndex 值 = -1 緊鄰其上的目錄具有 ListIndex 值 -2,再上一個為 ListIndex -3, 依次類推 Dir1.Path 的第一個子目錄具有 ListIndex 值 0
設定目前目錄 Path 屬性 磁碟機清單方塊 Drive 屬性指派目錄清單方塊的 Path 屬性: ChDir 陳述式 設定或傳回清單方塊中的目前目錄 (ListIndex = - 1) 磁碟機清單方塊 Drive 屬性指派目錄清單方塊的 Path 屬性: Dir1.Path = Drive1.Drive ChDir 陳述式 設定目前工作目錄應使用 ChDir Dir1.Path
7. 檔案清單方塊 (File List Box) 顯示由 Path 屬性指定的包含在目錄中的檔案 Pattern 屬性 File1.Path = Dir1.Path Pattern 屬性 來顯示這些檔案的子集 設定為 *.frm 後,將只顯示這種副檔名的檔案 分號分隔 File1.Pattern = "*.frm; *.bas"
使用檔案屬性 Normal 屬性的預設值為 True Archive 屬性的預設值為 True ReadOnly 屬性的預設值為 True System 屬性的預設值為 False Hidden 屬性的預設值為 False File1.ReadOnly = True File1.Archive = False File1.Normal = False File1.System = False File1.Hidden = False