Put Statement
VBA Statement, เขียนข้อมูลจากตัวแปรลงสู่ไฟล์ในดิสก์
ไวยากรณ์
Put[#] filenumber, [recnumber], varname
ประโยคคำสั่ง Put มีไวยากรณ์ของส่วนดังนี้
ส่วน |
รายละเอียด |
filenumber |
บังคับ, เป็นหมายเลขไฟล์ |
recnumber |
ไม่บังคับ, ประเภทข้อมูล variant (Long) หมายเลขเรคคอร์ด
(ไฟล์โหมด Random) หรือหมายเลขไบต์ (ไฟล์โหมด Binary) เมื่อเริ่มต้นอ่าน |
varname |
บังคับ, ชื่อของตัวแปรเก็บข้อมูลที่เขียนลงสู่ดิสก์
|
ลักษณะการประยุกต์
การอ่านข้อมูลด้วย Get มักจะเป็นข้อมูลที่เขียนลงไฟล์ด้วย Put
เรคคอร์ดหรือไบต์แรก ในไฟล์อยู่ที่ตำแหน่งที่ 1 เรคคอร์ดหรือไบต์ที่ 2 อยู่ที่ตำแหน่งที่
2 และต่อไป ถ้าละ recnumber เรคคอร์ดหรือไบต์ต่อไปจะได้รับการอ่าน แต่ต้องใส่เครื่องหมายจุลภาค
(,) เช่น
Put #4, , FileBuffer
สำหรับการเปิดไฟล์ในโหมด Random ต้องทำตามกฎนี้
- ถ้าความยาวของข้อมูลที่กำลังอ่านน้อยกว่าความยาวที่ระบุใน Len Clause
ของประโยคคำสั่ง Open การอ่านเรคคอร์ดของ Get อ่านตามขอบเขตความยาวเรคคอร์ด
ช่องว่างระหว่างจุดสิ้นสุดของเรคคอร์ดหนึ่งกับจุดเริ่มต้นของเรคคอร์ดต่อไป
มีการรองรับด้วยข้อมูลที่มีอยู่ของไฟล์บัฟเฟอร์ เนื่องจากจำนวนของข้อมูลรองรับไม่สามารถค้นหาได้แน่นอน
โดยทั่วไป แนวคิดที่ดี คือ มีความยาวเรคคอร์ดตรงกับความยาวของข้อมูลที่กำลังอ่าน
- ถ้าตัวแปรที่กำลังรับข้อมูลเป็น Variable - Length String การอ่านของ
Get อ่านข้อมูล 2 ไบต์ ที่ความยาวข้อความ และต่อไปอ่านข้อมูลเข้าสู่ตัวแปร
ดังนั้น ความยาวเรคคอร์ดระบุโดย Len clause ในประโยคคำสั่ง Open ต้องยาวมากกว่าอย่างน้อย
2 ไบต์ของความยาวจริงของข้อความ
- ถ้าตัวแปรที่กำลังรับข้อมูลเป็นประเภทข้อมูล Variant ที่เป็นตัวเลข Get
อ่าน 2 ไบต์ตามการระบุ Vartype ของประเภทข้อมูล Variant แล้วข้อมูลไปสู่ตัวแปร
ตัวอย่าง เมื่ออ่าน Variant ของ Vartype 3 การอ่านของ Get คือ การอ่าน
6 ไบต์ ได้แก่ 2 ไบต์ สำหรับการระบุประเภทข้อมูล Variant เป็น Vartype
3 (Long) และ 4 ไบต์เก็บข้อมูล ความยาวของเรคคอร์ดที่ระบุโดย Len Clause
ในประโยคคำสั่ง Open ต้องการอย่างน้อย 2 ไบต์มากกว่าจำนวนไบต์จริงของข้อมูลที่ต้องการเผื่อเก็บในตัวแปร
หมายเหตุ ประโยคคำสั่ง Get สามารถใช้อ่าน Variant array จากดิสก์
แต่ไม่สามารถใช้ Get อ่านประเภทข้อมูล Variant แบบปริมาณที่เก็บใน array
และไม่สามารถใช้ Get อ่านอ๊อบเจคจากดิสก์
- ถ้าตัวแปรที่รับข้อมูลเป็นประเภทข้อมูล Variant ของ Vartype 8 (String)
การอ่านของ Get อ่าน 2 ไบต์ระบุ Vartype, 2 ไบต์ระบุความยาวของข้อความ
และอ่านข้อมูลของข้อความ การระบุความยาวของ Len clause ในประโยคคำสั่ง
Open ต้องการอย่างน้อย 4 ไบต์มากกว่าความยาวของข้อความจริง
- ถ้าตัวแปรที่รับข้อมูล คือ dynamic array การอ่านของ Get อ่าน descriptor
ซึ่งยาวเท่ากับ 2 บวก 8 เท่าของจำนวนมิติ คือ 2 + 8 * จำนวนของมิติ ความยาวเรคคอร์ดที่ระบุ
โดย Len Clause ในประโยคคำสั่ง Open ต้องมากกว่าหรือเท่ากับจำนวนรวมไบต์ทั้งหมดที่ต้องการ
เพื่ออ่านข้อมูล array และ descriptor ของ array ตัวอย่างเช่น การประกาศ
array ต่อไปต้องการ 118 ไบต์ เมื่อ array ได้รับการเขียนไปที่ดิสก์
Dim MyArray (1 To 5, 1 To 10) As Integer
จำนวน 118 ไบต์ คือ 18 ไบต์ สำหรับ descriptor (2+8*2)
และ 100 ไบต์ สำหรับข้อมูล (5*10*2)
- ถ้าตัวแปรรับข้อมูล คือ static array การอ่านของ Get อ่านเฉพาะข้อมูล
ไม่มีการอ่าน descriptor
- ถ้าตัวแปรรับข้อมูลเป็นตัวแปรประเภทอื่น (นอกจาก Variable-Length string
หรือ Variant) การอ่านของ Get อ่านเฉพาะข้อมูลของตัวแปร ความยาวของเรคคอร์ดระบุ
โดย Len Clause ในประโยคคำสั่ง Open ต้องมากกว่าหรือเท่ากับความยาวของข้อมูลที่ได้รับการอ่าน
- Get อ่าน element ของ User-defined type เหมือนกับการอ่านอย่างเอกเทศ
ยกเว้น ไม่มีการรองรับระหว่าง element บนดิสก์ dynamic array ใน User -
define type (เขียนด้วย Put) มีคำนำหน้าโดย descriptor ซึ่งยาวเท่ากับ
2 บวก 8 เท่าของจำนวนมิติ เท่ากับ 2 + 8 * จำนวนของมิติ ความยาวเรคคอร์ดที่ระบุโดย
Len Clause ในประโยคคำสั่ง Open ต้องมากกว่า หรือเท่ากับจำนวนรวมของไบต์ทั้งหมดที่ต้องการ
เพื่ออ่านแต่ละ element รวมถึง array และ descriptor
สำหรับไฟล์ที่เปิดในโหมด Binary กฎ Random ทั้งหมดได้รับการประยุกต์ ยกเว้น
- Len Clause ในประโยคคำสั่ง Open ไม่มีผลกระทบ การอ่านของ Get อ่าน ตัวแปรทั้งหมดติดต่อกัน
ซึ่งไม่มีการแบ่งระหว่างเรคคอร์ด
- array อื่น นอกจาก array ใน User - defined type การอ่านของ Get อ่านเฉพาะข้อมูล
ไม่มีการอ่าน descriptor
- Get อ่าน Variable - Length String ที่ไม่ใช่ element ของ User defined
type โดยไม่มีการยกเว้น ความยาว descriptor 2 ไบต์ จำนวนของไบต์ที่อ่านเท่ากับจำนวนตัวอักษรในข้อความตัวอย่าง
ประโยคคำสั่งต่อไปอ่าน 10 ไบต์ จากไฟล์หมายเลข 1
VarString = String (10, " " )
Get # 1, VarString
ดูเพิ่มเติม
Get Statement, Open
Statement, ฟังก์ชัน Seek, Type Statement,
ฟังก์ชัน VarType
ตัวอย่าง
' กำหนด User - define type
Type Record
ID As Integer
Name As String * 20
End Type
' ประกาศตัวแปร
Dim MyRecord As Record, Position
' เปิดไฟล์สำหรับการเข้าถึงแบบสุ่ม (random access)
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' loop 5 รอบ
For RecordNumber = 1 To 5
' กำหนด id
MyRecord.ID = RecordNumber
' สร้างข้อความ
MyRecord.Name = "My Name" & RecordNumber
' เขียนเรคคอร์ดลงไฟล์
Put #1, RecordNumber, MyRecord
Next RecordNumber
' ปิดไฟล์
Close #1
|