檔案與資料存取.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第 7 章 文 件.
第十四章: 檔案.
高等医药院校药学类第三轮规划教材——大学计算机基础
File Access 井民全製作.
Chapter 5 迴圈.
Visual Basic程序设计.
程式語言Visual Basic 變數的可視範圍
課程名稱:程式設計 授課老師:________
Visual Basic 6.0 學習範本 第三章 基本資料型態.
第二章 Visual Basic语言基础.
第5章 数组 Visual Basic程序设计.
JDK 安裝教學 (for Win7) Soochow University
Visual Basic 程序设计 第12章文件处理
程式語言 -Visual Basic 變數、常數與資料型態.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
初识Visual Basic.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
第十三章 檔案.
第4章 程序控制结构与算法基础.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
安裝JDK 安裝Eclipse Eclipse 中文化
第12章 VBA模块设计.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
App Inventor2呼叫PHP存取MySQL
新觀念的 VB6 教本 第 6 章 資料型別.
檔案與磁碟的基本介紹.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
Java 程式設計 講師:FrankLin.
第10章 檔案與資料夾處理 10-1 檔案的基礎 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫 10-4 檔案與資料夾處理.
Chap3 Linked List 鏈結串列.
算法与程序设计 周少品.
Web Component: Accessing the Web and CSV 靜宜大學資管系 楊子青
VB程序设计语言 主讲教师:王 杨.
第七章 文件 本章重点 7.1 文件管理控件 7.2 文件处理 7.3 练习.
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
第一單元 建立java 程式.
VS.NET 2003 IDE.
VB程序设计语言 主讲教师:王 杨.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
小结 郭清溥.
輸入&輸出 函數 P20~P21.
打地鼠(陣列版).
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
第二章、第三章错题分析.
撰寫MATLAB基礎財務程式 柯婷瑱.
挑戰C++程式語言 ──第8章 進一步談字元與字串
GridView.
GridView操作 (II).
如何使用Gene Ontology 網址:
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
挑戰C++程式語言 ──第7章 輸入與輸出.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
1位选手参加了歌唱比赛,评委们的评分如下:
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
計算機程式 Visual BASIC 程式設計
資料表示方法 資料儲存單位.
解析算法与枚举算法.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
Web Component: Accessing the Web and CSV 靜宜大學資管系 楊子青
信息的加工 Word中查找和替换、自动更正、批注、修订 Excel中公式和函数、排序和筛选、图表的建立和编辑 字符识别OCR.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
InputStreamReader Console Scanner
Presentation transcript:

檔案與資料存取

Open "C:\test.tmp" For Output As #1 Str1 = “中華民國萬歲" Val1 = 7654321 Write #1, Str1, Val1 Str1 = “三民主義萬歲" Val1 = 1234567 Close #1 C: C:\test.tmp

Private Sub cmdrun_Click() Print , "九九乘法表" For I = 1 To 7 Step 3 【實例:輸出到表單】 Private Sub cmdrun_Click() Print , "九九乘法表" For I = 1 To 7 Step 3 For j = 1 To 9 For k = 0 To 2 Print I + k; "*"; j; "="; If (I + k) * j < 10 Then Print " "; Print (I + k) * j, Next k Print Next j Next I End Sub

Private Sub cmdrun_Click() Open “9x9.txt” for output as 1 【實例:輸出到檔案】 Private Sub cmdrun_Click() Open “9x9.txt” for output as 1 Print #1, , "九九乘法表" For I = 1 To 7 Step 3 For j = 1 To 9 For k = 0 To 2 Print #1, I + k; "*"; j; "="; If (I + k) * j < 10 Then Print #1, " "; Print #1, (I + k) * j, Next k Print #1, Next j Next I End Sub

Open 檔名 For 存取模式 [Access 存取屬性][鎖護] As [#] n [Len=記錄長度] 開啟檔案之語法 Open 檔名 For 存取模式 [Access 存取屬性][鎖護] As [#] n [Len=記錄長度] 檔名: 磁碟代號+目錄+檔名-->完整路徑 存取模式: 循序存取(Sequential Access) 二元存取(Binary Access) 隨機存取(Random Access) #n: 緩衝區或資料暫存區代號

關於檔名 完整路徑表示:(磁碟代號+目錄)+檔名+副檔名 若檔名之前未加上完整路徑則 “C:\Program Files\VB6\samples\data1.dat” “A:\SPP\LKK\5630.txt” 若檔名之前未加上完整路徑則 “data1.dat” “5630.txt” VB會將之設定為目前之工作目錄, 亦即VB系統所在之目錄,例如 “C:\Program Files\Microsoft Visual Studio\VB98\ data1.dat”

檔名指定 1.直接指定 Open “A:\SPP\LKK\5630.txt” for Input As #1 2.變數指定 Filename1=“C:\VB6\samples\data1.dat” Filename2=Text1.Text Filename3=Combo1.Text Open Filename1 for Output As #1 Open Filename2 for Output As #2 Open Filename3 for Output As #3 3.利用檔案管理相關物件 DriveListBox, DirListBox, FileListBox, 通用對話框

與路徑設定有關之控制項 FileListBox 縮寫File DriveListBox 縮寫Drive DirListBox 縮寫Dir

檔名有關物件之 一般設計 Dir1 File1 Text1 Combo1 若改變 Drive1 若改變則顯示檔案型式改變 顯示該目錄之檔名 決定選擇的檔案 顯示該目錄之檔名 顯示在Text1框 Drive1 Dir1 File1 Text1 則顯示目錄改變 若改變 Combo1 若改變則顯示檔案型式改變

利用Common Dialog Control可快速獲得 存取檔案視窗 Action=1 開啟檔案視窗 Action=2 儲存檔案視窗 Action=3 選取色彩視窗

Open 檔名 For 存取模式 As #緩衝區代號... 關於緩衝區編號 緩衝區是主記憶體開闢的一塊記憶體,作 為使用者存取磁碟資料的資料暫存區,當 資料存放達到緩衝區的大小或宣告關閉 緩衝區時(Close) ,電腦才一口氣將緩衝 區之資料存入磁碟之中。 緩衝區代號最多達512個 每一個緩衝區之長度預設為512 bytes

資 料 資 料 資 料 資 料 資 料 緩衝區 磁碟機 #512 #511 #510 #509 #2 #1 SLOW FAST 檔案 2 檔案 1 SLOW FAST

FreeFile函數

Open 檔名 For 存取模式 As #緩衝區代號... 存取模式: 循序存取(Sequential Access) 二元存取(Binary Access) 隨機存取(Random Access)

循序存取(Sequential Access) 存檔 Open filename For Output As #1 變數 寫入 資料 讀檔 Open filename For Input As #1 資料 變數 讀取

Open filename For Output As #1 Print #1, 資料1 Print #1, 資料2 Close #1 存檔語法 Open filename For Output As #1 Print #1, 資料1 Print #1, 資料2 Close #1 WordPad filename 資料1 資料2

Open filename For Output As #1 Print #1, 資料1,資料2 Close #1 存檔語法 Open filename For Output As #1 Print #1, 資料1,資料2 Close #1 資料1 資料2 filename

filename Dim Str1 As String, Val1 As Long Open "C:\test.tmp" For Output As #1 Str1 = “中華民國萬歲" Val1 = 7654321 Print #1, Str1, Val1 Str1 = “三民主義萬歲" Val1 = 1234567 Close #1 中華民國萬歲 7654321 三民主義萬歲 1234567 空14格 filename

Open filename For Output As #1 Write #1, 資料1 Write #1, 資料2 Close #1 存檔語法 Open filename For Output As #1 Write #1, 資料1 Write #1, 資料2 Close #1 資料1 資料2 filename

Open filename For Output As #1 Write #1, 資料1,資料2 Close #1 存檔語法 Open filename For Output As #1 Write #1, 資料1,資料2 Close #1 資料1,資料2 filename

讀檔語法 filename Open filename For Input As #1 Input #1, 變數1,變數2 Close #1 Write #1,資料1,資料2 filename 資料1,資料2 資料1 資料2 變數1 變數2 讀檔語法 Open filename For Input As #1 Input #1, 變數1,變數2 Close #1

filename Dim Str1 As String, Val1 As Long Open "C:\test.tmp" For Output As #1 Str1 = “中華民國萬歲" Val1 = 7654321 Write #1, Str1, Val1 Str1 = “三民主義萬歲" Val1 = 1234567 Close #1 “中華民國萬歲”,7654321 “三民主義萬歲”,1234567 以逗號分隔 filename

Private Sub Command1_Click() Dim Str1 As String, Val1 As Long Dim Tmp1, Tmp2 Open "C:\test.tmp" For Output As #1 Str1 = “中華民國萬歲" Val1 = 7654321 Write #1, Str1, Val1 Str1 = “三民主義萬歲" Val1 = 1234567 Close #1 Open "C:\test.tmp" For Input As #1 Input #1, Tmp1, Tmp2 '讀取第一筆 Msgbox Tmp1 & ":" & Tmp2 Input #1, Tmp1, Tmp2 '讀取第二筆 End Sub

Print與Write存檔之差異 Print 將存入之資料視為文字檔 Write保留變數之型態

循序檔資料讀取 循序檔-讀取資料 『lnput #』敘述(讀取資料) 在Visual Basic中,讀取循序檔的資料則可以透過『Input #』敘述、『Line Input #』敘述及『Input』函數來完成。 『lnput #』敘述(讀取資料) 【語法說明】: 變數1、變數2、、可以為數值、字串或陣列變數。 變數的資料型態最好與檔案的資料型態相符,並且檔案的數值資料可以讀入字串變數,但檔案的字串資料不可以讀入數值變數中。 循序檔中若同時包含有文字與數值資料,在存檔時,最好不要使用『Print #』敘述存檔,否則使用『Input #』敘述來讀取資料時,可能會發生錯誤。 語法:Input #檔案代碼,變數1[,變數2]… 功能:從檔案代碼對應的循序資料檔中依序讀出資料並存放到指定的變數中 25

循序檔資料讀取 『Line Input #』敘述(讀取整列資料) 語法:Line Input #檔案代碼,字串變數 【語法說明】: 1. 字串變數:存放檔案整列的資料。由於一次讀一列資料,因此不論資料是數值還是字元,都會被當成是字串的一部份,因此不可使用數值變數來存放讀取到的整列資料。 2. 『Line Input #』敘述將讀取整列的資料,直到碰上換列字元為止。不論該列資料中出現任何的字元都被當成一個普通的字元而已,即使是逗號字元與空白字元也是不具任何特殊意義的。 語法:Line Input #檔案代碼,字串變數 功能:從檔案代碼對應的循序資料檔中一次讀取一列資料並存放到指定的變數中 26

使用Line Input讀取一整行資料 Private Sub Command1_Click() Dim Str1 As String, Tmp1 As String Open "C:\test.tmp" For Output As #1 Str1 = “中華民國 萬萬歲" Print #1, Str1 Str1 = “三民主義 萬萬歲" Close #1 Open "C:\test.tmp" For Input As #1 Line Input #1, Tmp1 ‘讀取第一行 Msgbox Tmp1 Line Input #1, Tmp1 ‘讀取第二行 End Sub

Open filename For Append As #1 把資料添增到檔案裡 Private Sub Command1_Click() Dim Str1 As String Open "C:\test.tmp" For Append As #1 Str1 = “消滅萬惡共匪” Write #1, Str1 Str1 = “解救大陸同胞” Print #1, Str1 Close #1 End Sub C:\test.tmp “中華民國萬歲” “三民主義萬歲” “消滅萬惡共匪” “解救大陸同胞”

MyFile=“c:\record.txt” 範例:製作一個程式使用記錄檔 Private Sub Form_Load() Dim MyFile As String, UserName As String UserName = InputBox("請輸入你的名字", ,"客人") MyFile=“c:\record.txt” Open MyFile For Append As #1 Write #1, Date$, Time$, UserName '你的程式一啟動就會把 日期、時間與使用人的資料加入檔案 Close #1 End Sub

Private Sub Command1_Click() Dim MyFile As String, A$, B$, C$ List1.Clear ‘清除列示方塊內容 MyFile=“c:\record.txt” Open MyFile For Input As #1 Do Input #1, A$, B$, C$ List1.AddItem “日期:” & A$ & “,時間:” & _ B$ & ",使用者:" & C$ Loop Until EOF(1) Close #1 End Sub

What is a Binary file ? 顯示字元 A 1 ß ASCII 65 49 225 Hex 41 31 E1 All files are stored as binary form in devices. When we say binary file, we mean non-sequential files (text) or random file (records)!

循序檔內之資料以文字型態儲存,以1 byte為存取單位,因此只要以文字編輯器開啟之,便可了解其儲存格式,修改及處理容易,但其缺點為: 資料保密性差 較佔儲存空間(對數值型資料而言) 無法直接針對某一筆資料進行存取 以Binary方式存取可滿足上述之缺失

在循序檔中,資料均視為文字檔,每一個文字佔1位元組(Byte)之空間 “A”,”A”,”A”,”A”,…. Open “C:\test.txt” _ for output as #1 Dim I For I = 1 to 1024 Write #1, “A”, Write #1, 1, Next I Close #1 共需1024 x 4 bytes = 4096 bytes = 4 Kb 1,1,1,1,1,1,…... 共需1024 x 2 bytes = 2048 bytes = 2 Kb

二進位檔可大量節省數值型之儲存空間 “A”,”A”,”A”,”A”,…. Open “C:\test.txt” _ for output as #1 For I = 1 to 1024 Write #1, “A”, Write #1, 10000, Next I Close #1 共需1024 x 4 bytes = 4096 bytes = 4 Kb 10000,10000,… 共需1024* 6 bytes = 6Kb

二進位檔可大量節省數值型之儲存空間 AAAA….. Dim I as integer For I = 1 to 1024 put #1, ,“A”, put #2, ,10000, Next I 共需1024 x 1 bytes = 1024 bytes = 1 Kb 亂碼 共需1024 x 2 bytes = 2048 bytes = 2 Kb

Open 檔名 For Binary As #緩衝區編號 以 Put 存檔 <例> Put #1,2,str ‘代表將變數str存在第二個byte 並將指標移往該筆記錄 Put #1,,str ‘直接將變數str存到目前指標所 指之位置 以 Get 讀檔 Get #1,3,str ‘代表將第三個byte讀出存至變 數str,並將指標移往該byte Get #1,,str ‘將目前指標所指之第一byte讀 出並存至變數str

Dim Sars As Single Get #1,1,Sars Dim Sars As String*3 Get #1,1,Sars 循序檔每次讀 1 byte, 僅能依序讀取,無法直接讀取特定的byte = 1 byte I L I K E ½ 睡 ¤ 覺 二進位檔每次讀取之byte數依變數型別而異, 且可任意讀取特定位置,以指標值所指byte數控制 Dim Sars As Single Get #1,1,Sars Dim Sars As String*3 Get #1,1,Sars Dim Sars As Integer Get #1,1,Sars Dim Sars As Long Get #1,1,Sars

記錄(Record) 為何需要記錄(Record)? 在上一個範例中,我們可以從檔案中讀取3筆資料,由於每次的資料都存放在stu_id, ScoreComputer, ScoreMath, ScoreEng等變數中,因此無法一次儲存所有的資料 43

記錄(Record) 為了解決無法一起存放的問題,我們可以使用二維陣列來存放每一次讀取的資料,只需要使用簡單的迴圈即可完成,但是請注意當資料型態不一致時(例如:stu_id為字串,ScoreComputer為數值),我們必須要將陣列的資料型態宣告為Variant 。 44

記錄(Record) 如果我們想用之前學習的排序程式針對『計概』分數做排序,則陣列經由排序後會變成上圖之狀況 移動順序時若橫向列可以一併移動,才能解決這個問題,Visual Basic和其他的高階語言一樣,也提供了記錄(Record)資料型態。 45

記錄(Record) 「記錄」是由一些邏輯相關的「欄位」(Field)所構成。例如:一位學生的學號、計概成績、數學成績、英文成績就是一筆記錄,該記錄則擁有「學號」欄、「計概」欄、「數學」欄、「英文」欄,而一群學生的記錄集合將構成記錄陣列。 46

記錄(Record) 定義記錄型態的語法如下: 一個記錄資料型態包含許多「欄位」,每一個欄位都必須賦予一個欄位名稱。由於記錄是使用者自訂的資料型態,因此記錄在使用之前必須要先經過定義,然後在經過宣告後才可使用。 定義記錄型態的語法如下: 宣告記錄變數的語法如下: 語法: [Private|Public] Type記錄型態名稱    欄位名稱[(索引)] As資料型態    [欄位名稱[(索引)] As資料型態] End Type 功能:定義一個記錄型態包含哪些欄位以及各欄位的資料型態 。 語法:Dim 記錄變數名稱 As 記錄型態名稱 功能:宣告記錄變數為已定義的記錄資料型態 47

記錄(Record) 【範例】: 利用記錄型態來宣告一個成績的記錄。  一個記錄包括四個欄位如下: 學生學號:固定字串(8個字元) 計概成績:整數 數學成績:整數 英文成績:整數 其記錄型態定義格式如右: 上述定義代表有一個名稱為Score_Record記錄型態,當中包含有四個欄位,分別為固定字串變數stu_id、整數變數S_Computer、整數變數S_Math及、整數變數S_Eng。若要宣告含有五個記錄變數的記錄陣列Score,則可如下宣告: Type Score_Record stu_id As String * 8 S_Computer As Integer S_Math As Integer S_Eng As Integer End Type Dim Score(1 To 5) As Score_Record 48

13.4:記錄(Record) 經過上述宣告後,將會在主記憶體配置五個記錄變數,每個記錄變數都含有四個欄位,分別為Score(i).stu_id、Score(i).S_Computer、Score(i).S_Math、Score(i).S_Eng,且1≦i≦5。 該記錄陣列在主記憶體中的配置如下圖示意:

隨機檔 語法:Open "檔名" For Random As #檔案代碼[Len = 記錄長度] 功能:以隨機模式開啟檔案。 開檔隨機檔 【語法說明】: 1. 使用Open敘述開啟隨機檔,可以透過Len參數指定記錄長度(單位為Byte),若省略Len參數,則預設值為128 bytes。 2. 當開啟檔案後,若不知道記錄長度時,可以使用Len函數取得記錄大小。例如:Length = Len (Score_Record) 3. 隨機檔開啟後,可讀取也可寫入。不必像循序檔分為『Open…For Input』敘述和『Open…For Output』。 語法:Open "檔名" For Random As #檔案代碼[Len = 記錄長度] 功能:以隨機模式開啟檔案。 50

隨機檔 存取隨機檔 隨機檔的每一筆記錄都有一個不同的記錄編號。要搜尋某一筆記錄時,必須在程式中輸入該筆記錄的編號,由於隨機檔每筆資料長度均相同,系統可以很快依公式算出該記錄編號的實際位置,然後將該筆記錄取出。因此隨機檔的資料是可以隨意存取(不必按照順序),平均存取速度比循序檔快許多,適合用時常更動內容的檔案。 Put敘述 Get敘述 語法:Put[#]檔案代碼,[記錄編號],變數 功能:寫入一筆資料到隨機檔中 語法:Get[#]檔案代碼,[記錄編號],變數 功能:從隨機檔中讀取一筆資料 52

Get #1,12,Bank 如上例, 直接讀取Bank變數 Dim A As Byte Dim B As Integer A=1 byte B=2 bytes C=8 bytes Bank = 4 bytes Dim A As Byte Dim B As Integer Dim C As Double Dim Bank As Single A B C D Get #1,12,Bank

Get #1,12,Bank Get #1,27,Bank Dim A As Byte Dim B As Integer Dim C As Double Dim Bank As Single A=1 byte B=2 bytes C=8 bytes Bank = 4 bytes A B C D 想像若要連續讀取Bank變數,則讀取第1筆為 Get #1,12,Bank 想像若要連續讀取Bank變數,則讀取第2筆為 Get #1,27,Bank

Get #1,1,Deposit Get #1,2,Deposit Random 模式 以Random 模式讀取第1筆資料: Open 檔名 For Random As 緩衝區編號 Len = 結構變數長度 Type Money Dim A As Byte Dim B As Integer Dim C As Double Dim Bank As Single End Type Dim Deposit as Money Open “c:\test.bin" For Random As #1 Len =Len(Deposit) 以Random 模式讀取第1筆資料: Get #1,1,Deposit 以Random 模式讀取第2筆資料: Get #1,2,Deposit