การควบคุมตำแหน่งของ fp (file pointer) ในแฟ้มข้อมูล นิยมใช้กันมากในการประมวลผลแฟ้มข้อมูลแบบสุ่ม (random file access) ซึ่งสามารถให้ fp ไปยังตำแหน่งเริ่มต้นของแฟ้มข้อมูล (BOF =beginning of file) หรือ ตำแหน่งใดตำแหน่งหนึ่งในแฟ้มข้อมูลได้
ฟังก์ชันที่ใช้ควบคุมตำแหน่ง file pointer มีดังนี้
9.8.1 ฟังก์ชัน rewind( )
เป็นฟังก์ชันที่ใช้ย้ายตำแหน่งของ file pointer ไปยังตำแหน่งเริ่มต้นของแฟ้ม
เป็นฟังก์ชันที่ใช้ย้ายตำแหน่งของ file pointer ไปยังตำแหน่งเริ่มต้นของแฟ้ม
รูปแบบการใช้
rewind(fp);
9.8.2 ฟังก์ชัน fseek( )
เป็นฟังก์ชันที่ใช้ย้ายตำแหน่งของ file pointer ไปยังตำแหน่งที่ต้องการในแฟ้มข้อมูลโดยจะต้องกำหนดจุดเริ่มต้น (origin) ของ file pointer และค่า offset
เป็นฟังก์ชันที่ใช้ย้ายตำแหน่งของ file pointer ไปยังตำแหน่งที่ต้องการในแฟ้มข้อมูลโดยจะต้องกำหนดจุดเริ่มต้น (origin) ของ file pointer และค่า offset
รูปแบบการใช้
fseek(fp, offset, origin);
โดยที่
offset คือ ระยะห่างจากตำแหน่งจุดเริ่มต้น มีหน่วยเป็น byte
origin คือ จุดที่ file pointer ชี้อยู่ มีอยู่ 3 สถานะ ดังนี้คือ
macro-name ค่าคงที่ ความหมาย
SEEK_SET 0 file pointer อยู่ที่ต้นแฟ้ม BOF
SEEK_CUR 1 file pointer อยู่ที่ตำแหน่งปัจจุบัน
SEEK_END 2 file pointer อยู่ที่ท้ายไฟล์ EOF
SEEK_SET 0 file pointer อยู่ที่ต้นแฟ้ม BOF
SEEK_CUR 1 file pointer อยู่ที่ตำแหน่งปัจจุบัน
SEEK_END 2 file pointer อยู่ที่ท้ายไฟล์ EOF
ตัวอย่างที่ 9.8 แสดการใช้งาน fseek(fptr,10,0);
หรือคำสั่ง fseek(fptr,10, SEEK_SET);
หมายความว่าให้ย้าย file pointer ถัดจากตำแหน่งต้นไฟล์ (BOF) ไปอีก 10 byte
ข้อควรจำ ฟังก์ชัน fseek( ) จะให้ค่าไม่เท่ากับศูนย์ เมื่อไม่สามารถย้าย file pointer ได้
9.8.3 ฟังก์ชัน ftell( )
เป็นฟังก์ชันที่ใช้บอกตำแหน่งของ file pointer ว่าปัจจุบันกำลังชี้อยู่ที่ตำแหน่งใดในแฟ้มข้อมูล โดยฟังก์ชันนี้จะให้ค่ากลับเป็นตัวเลขจำนวนเต็ม
เป็นฟังก์ชันที่ใช้บอกตำแหน่งของ file pointer ว่าปัจจุบันกำลังชี้อยู่ที่ตำแหน่งใดในแฟ้มข้อมูล โดยฟังก์ชันนี้จะให้ค่ากลับเป็นตัวเลขจำนวนเต็ม
รูปแบบการใช้
ftell( fp );
ตัวอย่างที่ 9.9 แสดงการใช้งาน int position;
position = ftell(fp);
printf(“Position is %d Byte”,position);
เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน fseek( ) มาช่วยในการประมวลผลแฟ้มข้อมูลแบบสุ่มมากยิ่งขึ้น ให้ศึกษาจากโปรแกรมตัวอย่างต่อไปนี้
โปรแกรมตัวอย่างที่ 9.9 แสดงการใช้ฟังก์ชัน fseek( ) ช่วยประมวลผลแฟ้มข้อมูลแบบสุ่ม
/* randacss.c */ | ||||
หมายเหตุ ก่อน run โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ a: ที่มีแฟ้ม student.dat ที่เคยสร้างไว้แล้ว เพื่อให้โปรแกรมอ่านข้อมูลจากแฟ้มนี้
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 9.9 โปรแกรมจะอ่านข้อมูลในเรคอร์ดที่ 2 จากแฟ้มข้อมูลที่ drive a: ชื่อ student.dat ได้เลย โดยที่เราไม่ต้องอ่านเรคอร์ดที่ 1 ก่อน
จากโปรแกรมตัวอย่างที่ 9.9 โปรแกรมจะอ่านข้อมูลในเรคอร์ดที่ 2 จากแฟ้มข้อมูลที่ drive a: ชื่อ student.dat ได้เลย โดยที่เราไม่ต้องอ่านเรคอร์ดที่ 1 ก่อน
0 ความคิดเห็น:
แสดงความคิดเห็น