Állomány kezelés
Az állományok háttértárolón vannak Adatokat tartalmaznak Rekordok ==> Sorok Mezők ==> Adat elemek a sorokon belül
A rekordok vége CR, a file vége EOF Szekvenciális A rekordok vége CR, a file vége EOF A mezők vesszővel vannak elválasztva Változó hossz Sztringek idézőjelek között (a számok nem) Csak sorosan olvasható Minden előző mezőt el kell olvasni az eléréshez
Példa "Lynne","Weldon","999 Wide Way","Aiken","SC","29803" <CR> "Jim","Buck","1 Cow Lane","Aiken","SC","29801" <CR> "Tom","Thumb","PO Box 200","Aiken","SC","29802-200" <EOF>
A rekordok azonos hosszúságúak, van hivatkozási számuk Random A rekordok azonos hosszúságúak, van hivatkozási számuk A mezők fix hosszúak és pozíciójúak A hossznál kisebb adatok szóközökkel kiegészítődnek A nagyobbak csonkolódnak Tetszőleges sorrendben olvasható/írható Táblázatszerűen képzelhető el
Példa
Kezeléseik Open file Read, Write Close file
Általában a Form_Load-ban Open Statement Általában a Form_Load-ban Open „elérésiút_állománynév" For {Input|Output|Append|Random} As #FileSorszám [Len=hossz] FileSorszám = 1 to 511, hossz Max = 32,767 A hosszú elérési út helyett helyezzük az aktuális projekt alkönyvtárba az állományunkat, majd használjuk a App.Path kifejezést.
Input Output Append Random Open For olvasásra Írásra, BOF-t helyez el, majd felülír Append Az EOF-tól kezd írni Random Közvetlen elérésű állományokat olvas/ír
Sequential Random Open "C:\VB6\myfile.txt " For Input As #6 Példák Sequential Open "C:\VB6\myfile.txt " For Input As #6 Open "A:\myfile.txt " For Output As #1 Open App.Path & “\myfile.txt " For Append As #2 Random Open "A:\myfile.txt " For Random As #3 Len=60
Probléma: Az Open minősített teljes elérést kíván Vagy File elérési útja Probléma: Az Open minősített teljes elérést kíván Vagy Minden állomány a projekt alkönyvtárban App.Path Dim strPath as String strPath=App.Path & "\Filename.extension" Open strPath for Input as #4 Common Dialog használata ShowOpen metódussal
With dlgCommon Azaz.. Dim strFileName as String .DialogTitle = "Open" .CancelError = False .Filter = "All Files (*.*)|*.*" .ShowOpen If Len(.FileName) = 0 Then Exit Sub End If strFileName=.FileName End With Open strFileName for Input as #1
Fájl lezárása Általános helyei: Close [#FileNumber] A Close utasítás Fájl lezárása Általános helyei: Form_Unload, mnuFileSave, mnuFileSaveAs, mnuFileExit Close [#FileNumber] Ha a FileNumber hiányzik, akkor minden nyitott fájl (Az END is lezár, de nem helyes)
Példák Close #6 Close #1, #3 Close
FreeFile Függvénnyel A rendszer adja Előnyei FileNumber FreeFile Függvénnyel A rendszer adja Előnyei Nincs összeakadás más alkalmazásokkal Nem kell nyilvántartani Dim intFileNumber as Integer intFileNumber=FreeFile Open "Names.txt" For Output As #intFileNumber
Szekvenciális állományok
Input utasítással olvasunk Olvasás Open for Input Input utasítással olvasunk
Általában a Form_Load-ban Do Until EOF Input Általában a Form_Load-ban Do Until EOF Input #FileNumber, List of variables Input #2, strCourseNum, strClass, intHours
Input Dim strVideoTitle as String Do Until EOF(3) Input #3, strVideoTitle cboVideoTitle.AddItem strVideoTitle Loop Figyelem, számegyezés!!
Open For Output!! Általános helyei: Close-zal zárul Write Open For Output!! Általános helyei: mnuFileSave, mnuFileClose , Form_QueryUnload Close-zal zárul
Példa Write #FileNumber, List of variable or fields Write #1, txtFirstName, txtLastName, txtStreet, txtCity, txtxState, txtPhone Write #2, strCourseNum, strClass, intHours
For…. Next Write Dim intIndex as Integer Open "A:\videos.txt" For Output As #1 For intIndex=0 to cboVideoTitle.ListCount-1 Write #1, cboVideoTitle.ListIndex Next intIndex Close #1
Kill utasítás Nem lehet nyitva Törlés Kill „elérésiút" Kill "A:\Names.txt"
Name utasítás Nem lehet nyitva Átnevezés ReName „régi_elérés" As „Újelérés" ReName "A:\Names.txt" As "A:\People.txt"
Vátoztatások mentése Open eredeti for Input Open temp file for Output Átírás Vátoztatások mentése Open eredeti for Input Open temp file for Output Beolvasás pl. textboxba az eredetiből Kiírás textboxból a temp-be Close Kill eredeti Name temp
Open név for Output Ha nincs, létrehozza Kiírás az áll-ba Close Új létrehozása Open név for Output Ha nincs, létrehozza Kiírás az áll-ba Close
Közvetlen elérésű állományok
A rekordok azonos hosszúságúak, van hivatkozási számuk Random A rekordok azonos hosszúságúak, van hivatkozási számuk A mezők fix hosszúak és pozíciójúak A hossznál kisebb adatok szóközökkel kiegészítődnek A nagyobbak csonkolódnak Tetszőleges sorrendben olvasható/írható Táblázatszerűen képzelhető el
Példa
Rekord struktúra definiálása Még mielőtt I/O történik Type/End Type Helye: General Declarations Fix hosszúságú sztringeket alkalmazzunk!! Pl: Dim strFName as String * 20
Dim mudtPersonRecord As Person Type/End Type Private Type Person intEmpNum As Integer strFName As String * 20 strLName As String * 30 strPhone As String * 12 curRate As Currency End Type Dim mudtPersonRecord As Person Open App.Path & "\Names.dat" For Random as #1 Len=Len (mudtPersonRecord) Lehetőség: mudt prefix a User Defined Type-hoz….
Open után lehet írni, olvasni is Ha nem létezőt nyitunk, létrehozza üresen Egyszerre egy rekordot kezelhetünk
Open állomány for Random Get utasítás Olvasás Open állomány for Random Get utasítás
Általában a Form_Load-ban Do Until Get Általában a Form_Load-ban Do Until Get #FileNumber, [RecordNumber], RecordName Get #2, 4, mudtPersonRecord Get #2, intRecordNumber, mudtPersonRecord Ha a RecordNumber hiányzik, a következőt olvassuk
Nyitva kell lennie "For Random" Általában: Put Random file írására Nyitva kell lennie "For Random" Általában: mnuFileSave, mnuFileClose vagy Form_QueryUnload Close követi
Put #FileNumber, [RecordNumber], RecordName Put #2, 4, mudtPersonRecord Put #2, intRecordNumber, mudtPersonRecord Ha RecordNumber hiányzik, a következőt olvassuk
Mezőkhöz való hozzáférés Get és Put „pont jelölés”, segítség a User Defined Type megnézése
Get Put: Példa Get #2, 1, mudtPersonRecord txtLName.Text=mudtPersonRecord.strLName Put: mudtPersonRecord.strPhone=txtPhone.Text Put #2, 1, mudtPersonRecord
Length of File: a Fájl mérete byte-ban EOF helyett lehet használni LOF Függvény Length of File: a Fájl mérete byte-ban EOF helyett lehet használni Maxrekszám=LOF/rekméret LOF(FileNumber) LOF(3) intNumRecords=LOF(3)/Len(mudtPersonRecord)
A fájlmutató értékét adja visza Seek Függvény A fájlmutató értékét adja visza Seek(FileNumber) intNextRecord=Seek(3)
Kitörli az üres helyeket egy sztringből Trim ==> mindkét végéről Trim Függvény Kitörli az üres helyeket egy sztringből Trim ==> mindkét végéről LTrim==> left RTrim ==> right Trim(String) LTrim(String) RTrim(String) txtLName.Text=RTrim(mudtPersonRecord.strLName)
Sub GetRecord(lngRecNum as Long) Get #1, lngRecNum, mudtPersonRecord Példa Sub GetRecord(lngRecNum as Long) Get #1, lngRecNum, mudtPersonRecord With mudtPhoneRecord txtEmpNum.Text = .intEmpNum txtFName.Text = RTrim(.strFName) txtLName.Text = Rtrim(.strLName) txtPhone.Text = Rtrim(.strPhone) txtRate.Text = .curRate End With End Sub
Sub PutRecord(lngRecNum as Long) With mudtPhoneRecord Példa Sub PutRecord(lngRecNum as Long) With mudtPhoneRecord .intEmpNum=Val(txtEmpNum.Text) .strFName = txtFName.Text .strLName = txtLName.Text .strPhone = txtPhone.Text .curRate = Val(txtRate.Text) End With Put #1, lngRecNum, mudtPersonRecord End Sub