Online Reference

Home

Microsoft Reference
Knowledge Developer Database Internet Resource Forum
VBA
Input / Output Function
ดาวน์โหลดคู่มือ

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