網路城邦
上一篇 回創作列表 下一篇  字體:
隨機檔Random file
2009/04/07 08:43:54瀏覽2806|回應47|推薦0

Final notice: 2009/06/09  好吧!已經很久的一段時間了!這一次是最後一次的展延了!鐵定不再展延了!成績評定了!到本週日截止!逾期者!Sorry!我就不再給你(妳)評分了!請務必記得繳交的期限! 2009/06/14 23:00 是繳交的最後期限!

Date:2009/05/26 -> 通知! 煩請同學们,務必在本週內完成這項作業,並建置成".exe" 執行檔,上傳到你個人在學校的網路儲存空間中,並將超連結(url: http://wwws.sysh.tc.edu.tw/~h710xxx/filename.exe ) 回應到本文,以便進行檢查,評分! 謝謝合作!

*加油!已經過了一段"長時間"了!可是......但是.....仍然是........才"六篇回應" upload their homework! so hurry! don't be delay! 

本文已經公佈Pretty long了,相信各位也應該有看過簡報檔了!那麼就請準備“開始“吧! 要把握時間!2009/05/05-> Please completed the work at this week! cause next week you will be busy!

隨機檔介紹

相關簡報檔案下載網址: badongo

要讓檔案中的資料能夠隨意存取,而不要依資料的先後順序寫入或讀出,就需要利用隨機檔。隨機檔中每一筆記錄都賦予一個編號,存取時是依照編號計算出其存放位置,來存取資料的。

  若每筆資料實際長度差異很大時,使用隨機檔會較浪費磁碟空間。但是數值資料在隨機檔中是以二進位方式來存放,而循序檔則是以 ASCII 碼來存取,對於位數較長的數值,使用隨機檔反而會比循序檔較節省磁碟空間。在下列情況下,資料使用隨機檔較適宜:

1. 需要時常做線上查詢的資料檔。

2. 資料異動頻繁的資料檔

3. 可以將資料檔設成同時可讀寫的模式,循序檔無法做到,循序資料檔開啟檔案時只能單獨設成讀或寫的模式。

# 注意

1. 要節省磁碟存放空間

若檔案中每筆資料的記錄長度差異不大時,可使用隨機檔。若每筆資料的記錄長度差異很大時,可使用循序檔。

2. 存取要快時,請使用隨機檔。

1. 隨機檔的開檔與關檔

一、開檔

語法: Open " 檔名 " For Random As # 檔案代碼 [Len = 記錄長度 ]

功能:以隨機方式開啟檔案

1. Open 開啟的隨機檔可以指定記錄長度,如果省略 Len 參數則預設值為 128 bytes 。

2. 記錄長度可以用 Len 函數來取得其大小。

3. 隨機檔開檔後,不但可以讀取也可以寫入的動作,不像循序檔必須使用 Open … For Input 和 Open … For Output 來達成。

二、關 檔

語法: 1.Close[#file_num]

2.Reset

功能:用來關閉檔案

1. 關檔語法如同循序檔。

2. Reset 敘述會將緩衝區中的資料,寫入對應的檔案中,再關閉所有檔案。

2. 隨機檔的存取

隨機檔的每一筆記錄都有編號,當要搜尋某一筆記錄時,由於隨機檔每筆資料長度一樣,因此只要在程式中輸入該筆記錄的編號, V B 依照所指定的編號算出該筆記錄在隨機檔中的位置,便可取出該筆記錄,由於隨機檔可隨意存取,故存取速度比循序檔快,所以效率高是隨機檔的主要優點。

一、 Put 敘述

語法: Put[#] 檔案代碼, [ 記錄編號 ] ,變數

功能:將一筆資料寫入隨機檔中

二、 Get 敘述

語法: Get[#] 檔案代碼, [ 記錄編號 ] ,變數

功能:由隨機檔中讀取一資料

1. 記錄編號範圍 1 ~ 2,147,483,647 。

2. 省略記錄編號,則由上一次記錄編號的下一筆開始寫入或讀取。

3. 變數的長度不能大於隨機檔的記錄長度。

4. 隨機檔中對每一個記錄做存取時,所使用變數的資料型態要和記錄中

各對應欄位的資料型態一致,否則會出現錯誤。

三、隨機檔與記錄

  將不同資料型態的變數聚集在一起,用一個簡單變數來代表,此變數即為記錄型態變數。

OK! now we shall design a score enter program with random files function! and teh file that storeage the recorded is call test.txt ( but beware that when we store the score to the file it isn't use pure text mode it has been compress so you can't directly read the content from that text file must go through the program file to open it and import the content to it!

1. design the form and change the property of the object

2. write the code

3. build the project to execute file!

code as follow:

Public Class Form1

 Structure MyStd

 Public Id As Integer

 Public name As String

 Public math As Integer

 Public eng As Integer

 Public chi As Integer

 End Structure

 Private Gbl_RecNo, Gbl_CurRec As Integer

 Private fileName As String

 Private fileNum As Integer

 Sub Clear_Screen()

 txtId.Text = ""

 txtName.Text = ""

 txtChi.Text = ""

 txtEng.Text = ""

 txtMath.Text = ""

 End Sub

 Sub Display_StdData()

 Dim fileNum As Integer

 Dim std As MyStd

 Dim recLen As Long = Len(std)

 lblCurrent.Text = Gbl_CurRec

 fileNum = FreeFile() ' 開啟隨機檔案

 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen)

 If Not EOF(fileNum) Then

 FileGet(fileNum, std, Gbl_CurRec) ' 取出結構資料

 ' 顯示的記錄資料

 txtId.Text = std.Id

 txtName.Text = std.name

 txtMath.Text = std.math

 txtEng.Text = std.eng

 txtChi.Text = std.chi

 End If

 FileClose(fileNum)

 End Sub

 Private Sub cmdWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWrite.Click

 Dim std As MyStd

 Dim recLen As Long = Len(std)

 recLen = Len(std)

 If txtId.Text = "" Then

 MessageBox.Show("編號不可空白!")

 Exit Sub

 End If

 If txtName.Text = "" Then

 MessageBox.Show("姓名不可空白!")

 Exit Sub

 End If

 std.Id = CInt(txtId.Text)

 std.name = txtName.Text

 std.math = CInt(txtMath.Text)

 std.eng = CInt(txtEng.Text)

 std.chi = CInt(txtChi.Text)

 Gbl_RecNo += 1

 fileNum = FreeFile() ' 開啟隨機檔案

 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen)

 FilePut(fileNum, std, Gbl_RecNo) ' 存入結構

 FileClose(fileNum)

 Gbl_CurRec = Gbl_RecNo

 lblTotal.Text = Gbl_RecNo

 lblCurrent.Text = Gbl_CurRec

 Clear_Screen()

 End Sub

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 fileName = CurDir() & "\test.txt"

 lblCurrent.Text = "0"

 lblTotal.Text = "0"

 End Sub

 Private Sub cmdFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFirst.Click

 Gbl_CurRec = 1

 Display_StdData()

 End Sub

 Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click

 Gbl_CurRec = Gbl_RecNo

 Display_StdData()

 End Sub

 Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click

 If Gbl_CurRec < Gbl_RecNo Then

 Gbl_CurRec += 1

 Else

 Gbl_CurRec = Gbl_RecNo

 End If

 Display_StdData()

 End Sub

 Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click

 If Gbl_CurRec > 1 Then

 Gbl_CurRec -= 1

 Else

 Gbl_CurRec = 1

 End If

 Display_StdData()

 End Sub

 Private Sub cmdClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

 Clear_Screen()

 End Sub

 Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click

 Application.Exit()

 End Sub

 Private Sub cmdOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpen.Click

 Dim fileNum As Integer

 Dim std As MyStd

 Dim recLen As Long = Len(std)

 fileNum = FreeFile() ' 開啟隨機檔案

 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen)

 Gbl_RecNo = 0

 Do Until EOF(fileNum)

 Gbl_RecNo += 1

 FileGet(fileNum, std, Gbl_RecNo) ' 取出結構資料

 Loop

 FileClose(fileNum)

 Gbl_CurRec = 1

 lblTotal.Text = Gbl_RecNo

 lblCurrent.Text = Gbl_CurRec

 Display_StdData()

 End Sub

 Private Sub cmdEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEdit.Click

 Dim fileNum As Integer

 Dim std As MyStd

 Dim recLen As Long = Len(std)

 If txtId.Text = "" Then

 MessageBox.Show("編號不可空白!")

 Exit Sub

 End If

 If txtName.Text = "" Then

 MessageBox.Show("姓名不可空白!")

 Exit Sub

 End If

 std.Id = CInt(txtId.Text) ' 編輯的記錄編號

 std.name = txtName.Text

 std.math = CInt(txtMath.Text)

 std.eng = CInt(txtEng.Text)

 std.chi = CInt(txtChi.Text)

 fileNum = FreeFile() ' 開啟隨機檔案

 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen)

 FilePut(fileNum, std, Gbl_CurRec) ' 存入結構資料

 FileClose(fileNum)

 End Sub

 Private Sub cmdQuery_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdQuery.Click

 Dim fileNum, tid As Integer

 Dim std As MyStd

 Dim recLen As Long = Len(std)

 If txtId.Text = "" Then

 Exit Sub

 End If

 tid = CInt(txtId.Text) ' 查詢的記錄編號

 If tid > 0 And tid <= Gbl_RecNo Then

 fileNum = FreeFile() ' 開啟隨機檔案

 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen)

 FileGet(fileNum, std, tid) ' 取出結構資料

 FileClose(fileNum)

 txtId.Text = std.Id ' 顯示的記錄資料

 txtName.Text = std.name

 txtMath.Text = std.math

 txtEng.Text = std.eng

 txtChi.Text = std.chi

 End If

 End Sub

End Class 

( 知識學習語言 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yangfu&aid=2824837

 回應文章 頁/共 5 頁  回應文章第一頁 回應文章上一頁 回應文章下一頁 回應文章最後一頁

40214
終於還是交了
2009/06/23 10:03

不好意思~這麼晚才交

班級:402

姓名:唐文正

學號:h710054

檔名:710054-7.exe


40238
homework
2009/06/23 09:56

402  38  蔡豫佳

710077

檔名 710079-6.exe


賴孟瑜
作業
2009/06/23 09:56

40240

710079

檔名: 710079-43


h710001
作業
2009/06/16 08:35

姓名:王千瑜

班級:401

學號:h710001

檔名:Randomfile001.exe


710065
25
2009/06/12 23:18

free file.exe

高一二_25

710065

黃筱葳


710055
作業
2009/06/11 12:47

402

張書瑜

710055

檔名:710055004.exe


張廖倖年
作業......(終於完成了!!)
2009/06/10 21:26

學號:710056

班級:402

座號:16

檔名:random.exe


曾姿華
作業
2009/06/10 21:10

姓名 曾姿華

班級 401

座號 24

學號 40124

檔名 random.exe


柯冠竹
作業^O^
2009/06/10 19:53

學號:710050

班級:2

座號:9

檔名:homework.exe


紀傑瑋
do it
2009/06/09 10:09

姓名:紀傑瑋

學號:710052

班級:402

座號:11

檔案:second

頁/共 5 頁  回應文第一頁 回應文章上一頁 回應文章下一頁 回應文章最後一頁