More Related Content Similar to งานทำ Blog บทที่ 12 (20) More from รัสนา สิงหปรีชา (20) งานทำ Blog บทที่ 122. แฟ้มข้อมูล
แฟ้มข้อมูล (File) เป็นชุดข้อมูลที่ถูกเก็บไว้บนดิสก์ มี
การกาหนดชื่อส าหรับอ้างถึง ข้อมู ล (ไฟล์ ) โดยแบ่ง
ออกเป็น 2 ประเภท
1. ไฟล์ข้อความ (Text File) จะเป็นไฟล์ที่เก็บเฉพาะตัว
อักขระแอสกีเท่านั้น
2. ไฟล์ไบนารี (Binary File) เป็นกลุ่มข้อมูลขนาดหนึ่ง
ไบต์เรียงต่อกัน โดยการเก็บข้อมูลจะเป็นในรูปแบบ
เฉพาะของคอมพิวเตอร์ ซึ่งจะเป็นเลขฐานสอง
3. การเปิดและปิดไฟล์ (File Open/Close)
สิ่ ง แรกที่ ต้ อ งท าในการเขี ย นโปรแกรมให้ ท างานกั บ
ไฟล์ข้อมูลนั้น คือ การสร้างตัวแปรไฟล์พอยน์เตอร์ (File Pointer)
ซึ่งเป็นตัวแปรสาหรับชี้ไปยังตาแหน่งที่อยู่ของไฟล์ที่เราต้องการ
เพื่ออ้างอิงถึงไฟล์ข้อมูล ซึ่งมีรูปแบบดังนี้
FILE *filePointerName;
โดยที่ filePointerName เป็นชื่อตัวแปรไฟล์พอยน์เตอร์
! การสร้างตัวแปรไฟล์พอยน์เตอร์จะต้องเขียนคาว่า FILE เป็นตัว
ใหญ่เสมอ จากนั้นเว้นวรรคแล้วตามด้วยเครื่องหมาย * ซึ่งทั้งสองตัวนี้
จะเป็นการบ่งบอกถึงการสร้างตัวแปรไฟล์พอยน์เตอร์
7. 1. กรณีทางานแบบ Text File
โหมดการทางาน
การทางาน
r
เปิดไฟล์เพื่ออ่านข้อมูลอย่างเดียว (Reading)
•ถ้ามีไฟล์แล้ว ตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
•ถ้าไม่มีไฟล์ จะแสดง Error Returned กลับมา
w
เปิดไฟล์เพื่อเขียนข้อมูลอย่างเดียว (Writing)
•ถ้ามีไฟล์แล้ว จะทาการลบข้อมูลไฟล์เดิมทิ้ง แล้วตัวไฟล์พอยน์เตอร์ก็จะชี้ไปยังตาแหน่งต้นไฟล์
(เขียนข้อมูลทับไฟล์เดิม)
•ถ้าไม่มีไฟล์ จะทาการสร้างไฟล์ใหม่ แล้วตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
a
เปิดไฟล์เพื่อเขียนข้อมูลต่อท้ายไฟล์เดิมอย่างเดียว (Append)
•ถ้ามีไฟล์แล้ว ตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งท้ายไฟล์ (เขียนข้อมูลต่อท้ายไฟล์เดิม)
•ถ้าไม่มีไฟล์ จะทาการสร้างไฟล์ใหม่ แล้วตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
r+
เปิดไฟล์เดิมที่มีอยู่แล้วเพื่ออ่านหรือเขียนข้อมูลทับไฟล์เดิม
w+
เปิดไฟล์เดิมที่มีอยู่แล้วเพื่ออ่านหรือเขียนข้อมูลทับไฟล์เดิม ถ้ายังไม่มีไฟล์ก็จะสร้างไฟล์ใหม่ขึ้นมา
a+
เปิดไฟล์เดิมที่มีอยู่แล้วเพื่ออ่านหรือเขียนข้อมูลต่อท้ายไฟล์
8. 2. กรณีทางานแบบ Binary File
โหมดการทางาน
การทางาน
rb
เปิดไบนารีไฟล์เพื่ออ่านข้อมูลอย่างเดียว (Reading)
•ถ้ามีไฟล์แล้ว ตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
•ถ้าไม่มีไฟล์ จะแสดง Error Returned กลับมา
wb
เปิดไบนารีไฟล์เพื่อเขียนข้อมูลอย่างเดียว (Writing)
•ถ้ามีไฟล์แล้ว จะทาการลบข้อมูลไฟล์เดิมทิ้ง แล้วตัวไฟล์พอยน์เตอร์ก็จะชี้ไปยังตาแหน่งต้นไฟล์
(เขียนข้อมูลทับไฟล์เดิม)
•ถ้าไม่มีไฟล์ จะทาการสร้างไฟล์ใหม่ แล้วตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
ab
เปิดไบนารีไฟล์เพื่อเขียนข้อมูลต่อท้ายไฟล์เดิมอย่างเดียว (Append)
•ถ้ามีไฟล์แล้ว ตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งท้ายไฟล์ (เขียนข้อมูลต่อท้ายไฟล์เดิม)
•ถ้าไม่มีไฟล์ จะทาการสร้างไฟล์ใหม่ แล้วตัวไฟล์พอยน์เตอร์จะชี้ไปยังตาแหน่งต้นไฟล์
rb+ หรือ r+b
เปิดไบนารีไฟล์เดิมที่มีอยู่แล้วเพืออ่านหรือเขียนข้อมูลทับไฟล์เดิม
่
wb+ หรือ w+b
เปิดไบนารีไฟล์เดิมที่มีอยู่แล้วเพืออ่านหรือเขียนข้อมูลทับไฟล์เดิม ถ้ายังไม่มีไฟล์ก็จะสร้างไฟล์
่
ใหม่ขึ้นมา
ab+ หรือ a+b
เปิดไบนารีไฟล์เดิมที่มีอยู่แล้วเพืออ่านหรือเขียนข้อมูลต่อท้ายไฟล์
่
10. การทางานกับ Text File
1
การอ่านข้อมูลจากไฟล์ทีละตัวอักษรด้วยฟังก์ชัน getc() และฟังก์ชัน fgetc()
2
การเขียนข้อมูลลงไฟล์ทีละตัวอักษรด้วยฟังก์ชัน putc() และฟังก์ชัน fputc()
3
การอ่านข้อมูลจากไฟล์ทีละบรรทัดด้วยฟังก์ชัน fgets()
4
การเขียนข้อความลงไฟล์ด้วยฟังก์ชัน fputs()
5
การอ่านข้อมูลจากไฟล์โดยใช้ฟงก์ชัน fscanf()
ั
6
การอ่านข้อมูลลงไฟล์ด้วยฟังก์ชัน fprintf()
11. การอ่านข้อมูลจากไฟล์ทีละตัวอักษรด้วยฟังก์ชัน getc() และฟังก์ชัน fgetc()
ในการอ่านข้อมูลจากไฟล์ทีละตัวอักษรนั้นจะใช้ฟังก์ชัน getc() หรือ
ฟังก์ชัน fgetc() โดยส่งตัวแปรไฟล์พอยน์เตอร์เข้าไปในฟังก์ชัน เพื่อ
กาหนดจุดเริ่มต้นของไฟล์ เมื่อไฟล์พอยน์เตอร์ทาการอ่านตัวอักษรใด ๆ
ออกมา 1 ตัว ไฟล์พอยน์เตอร์จะชี้ไปที่ตัวอักษรถัดไปทันที และเมื่ออ่าน
ข้อมูลจนจบไฟล์แล้ว ฟังก์ชัน getc() หรือฟังก์ชัน fgetc() จะคืนค่า EOF
กลับมาให้ฟังก์ชันที่เรียกใช้งาน
16. มีรูปแบบการใช้งานดังนี้
fgets(strName, length, filePointerName);
โดยที่ strName เป็นตัวแปรชนิด char ที่มารับข้อความที่อ่านได้จากไฟล์
length เป็นความยาวข้อความที่ต้องการอ่านจากไฟล์ ถ้า length
น้อยกว่าจานวนตัวอักษรที่บรรทัดนั้นก็จะอ่านข้อมูลที่บรรทัดนั้น ๆ หลาย
รอบ แต่ละรอบเท่ากับ length จนกว่าจะจบบรรทัด ถ้า length มากกว่า
จานวนตัวอักษรที่บรรทัดนั้นก็จะอ่านข้อมูลจบเพียงบรรทัดนั้น
filePointerName
17. การเขียนข้อความลงไฟล์ด้วยฟังก์ชัน fputs()
ในการเขียนข้อมูลลงไฟล์ทีละบรรทัดนั้นจะใช้ฟังก์ชัน fputs() ซึ่ง
ในการทางานจะต้องส่งตัวแปรไฟล์พอยน์เตอร์เข้าไปในฟังก์ชัน เพื่อ
กาหนดจุดเริ่มต้นของไฟล์ เมื่อเขียนข้อมูลลงบรรทัดใดเสร็จแล้ว ไฟล์
พอยน์เตอร์จะชี้ไปที่บรรทัดถัดไป เมื่อเขียนข้อมูลลงไฟล์เรียบร้อยแล้ว
ให้ปิดไฟล์ทุกครั้ง ถ้าการปิดไฟล์เกิดข้อผิดพลาดฟังก์ชันจะคืนค่า EOF
กลับมา ซึ่งมีรูปแบบการใช้งานดังนี้
fputs(str, filePointerName);
โดยที่
filePointerName เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไป
ยังไฟล์ท่ต้องการเขียนข้อมูล
ี
str เป็นตัวแปรชนิด char หรือข้อความที่ต้องการเขียนลงไฟล์
19. การเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน fprintf()
เป็นฟังก์ชันสาหรับแสดงหรือบันทึกข้อมูลลงไฟล์ ซึ่งตัวอกษร f ที่อยู่
หน้าคาว่า printf เป็นการบ่งบอกถึงให้ทาการแสดงหรือบันทึกไฟล์
นั่นเอง ซึ่งมีรูปแบบการใช้งานดังนี้
fprintf(filePointerName, “string format”, varName);
โดยที่
filePointerName เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไป
ยังไฟล์ท่ต้องการเขียนข้อมูล
ี
string format เป็นรหัสรูปแบบของข้อความในภาษา C
varName
เป็นตัวแปรเก็บข้อมูลที่ต้องการเขียนลงไฟล์ ซึ่งต้องมี
ชนิดข้อมูลตรงกับ string format
20. ตารางรหัสรูปแบบข้อมูล input และ output
รหัสรูปแบบ
ความหมาย
%c
%d
%ld
ใช้แทนค่าตัวแปรตัวอกษรตัวเดียว (char)
ใช้แทนค่าตัวแปรจานวนเต็ม (int)
ใช้แทนค่าตัวแปรจานวนเต็ม (long int)
%hd
%u
%hu
%lu
%o
%ho
%lo
ใช้แทนค่าตัวแปรจานวนเต็ม (short int)
ใช้แทนค่าตัวแปรที่เก็บค่าเป็นจานวนเต็มบวก (unsigned int)
ใช้แทนค่าตัวแปรจานวนเต็มแบบไม่คิดเครื่องหมาย (unsigned short int)
ใช้แทนค่าตัวแปรจานวนเต็มแบบไม่คิดเครื่องหมาย (unsigned long int)
ใช้แทนค่าตัวแปรในรูปฐานแปด (int)
ใช้แทนค่าตัวแปรในรูปฐานแปด (short)
ใช้แทนค่าตัวแปรในรูปฐานแปด (long)
21. ตารางรหัสรูปแบบข้อมูล input และ output (ต่อ)
รหัสรูปแบบ
%x หรือ %X
%hx หรือ %hX
%lx หรือ %lX
%f
%lf
%Lf
%e, %E, %g หรือ %G
%le, %lE, %lg หรือ %lG
%Le, %LE, %Lg หรือ %LG
%s
%p
%%
ความหมาย
ใช้แทนค่าตัวแปรในรูปฐานสิบหก (int)
ใช้แทนค่าตัวแปรในรูปฐานสิบหก (short)
ใช้แทนค่าตัวแปรในรูปฐานสิบหก (long)
ใช้แทนค่าตัวแปรจานวนจริง ที่เป็นทศนิยม (float)
ใช้แทนค่าตัวแปรจานวนจริง ที่เป็นทศนิยม (double)
ใช้แทนค่าตัวแปรจานวนจริง ที่เป็นทศนิยม (long double)
ใช้แทนค่าตัวแปรจานวนจริง (float) ออกมาในรูป e ยกกาลัง หรือเอ็กซ์โปเนนต์
ใช้แทนค่าตัวแปรจานวนจริง (double) ออกมาในรูป e ยกกาลัง หรือเอ็กซ์โปเนนต์
ใช้แทนค่าตัวแปรจานวนจริง (long double) ออกมาในรูป e ยกกาลัง หรือเอ็กซ์โปเนนต์
ใช้แทนค่าตัวแปรที่เก็บค่าเป็นสตริง หรือตัวแปรชุดตัวอักษร (string)
ใช้แทนตาแหน่งพอยน์เตอร์
แทนเครื่องหมาย %
23. การทางานกับ Binary File
Binary file จะเก็บข้อมูลในลักษณะรูปแบบทางคอมพิวเตอร์เป็น
เลขฐานสอง และในการทางานเกี่ยวกับ Binary file ต่างจาก Text File
ตรงที่เราจะต้องระบุจานวนไบต์ที่ต้องการทางาน มี 2 รูปแบบดังนี้
1. การอ่านข้อมูลจากไฟล์ด้วยฟังก์ชัน fread()
2. การเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน fwrite()
24. การอ่านข้อมูลจากไฟล์ด้วยฟังก์ชัน fread()
ในการอ่านข้อมูลจาก Binary file จะต้องกาหนดขนาดของ
ข้อมูลและจานวนข้อมูลที่อ่านขึ้นมา เพื่อให้สามารถอ่านข้อมูลได้อย่าง
ถูกต้อง ฟังก์ชัน fread() นี้จะคล้ายกับฟังก์ชัน fscan() เพียงแต่ฟังก์ชัน
fread() จะเหมาะสาหรับการอ่านไฟล์ในประเภท Binary File ซึ่งจะมี
รูปแบบการใช้งานดังนี้
fread(&variableNmae, size, count, filePointerName);
!
ฟังก์ชัน fread() จะคืนค่าเลขจานวนเต็มเป็นจานวน byte ที่
อ่านได้จากไฟล์ และจะคืนค่าเป็น 0 เมื่ออ่านจนสิ้นสุดไฟล์แล้ว (EOF)
25. โดยที่
&variableName เป็นตาแหน่งตัวแปร struct หรือ array ใน
หน่วยความจาที่ใช้เก็บค่าที่อ่านได้จากไฟล์
size
เป็นขนาดของตัวแปร struct หรือ array โดยมีหน่วย
เป็นไบต์ ซึ่งสามารถหาได้จากฟังก์ชัน sizeof(data
type); หรือ sizeof(variable name);
count
เป็นจานวนครั้งที่ต้องการอ่านข้อมูลจากไฟล์
filePointerName เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไปยัง
ไฟล์ที่ต้องการอ่านข้อมูล
26. การเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน fwrite()
ฟังก์ชัน fwrite() นี้จะคล้ายกับฟังก์ชัน fprintf() เพียงแต่ฟังก์ชัน
fwrite() จะใช้สาหรับการเขียนไฟล์ในประเภท Binary File ซึ่งมีรูปแบบ
ดังนี้ fwrite(&variableNmae, size, count, filePointerName);
โดยที่
variableName เป็นตาแหน่งตัวแปร struct หรือ array ใน
หน่วยความจาที่ต้องการเขียนลงไฟล์
size
เป็นขนาดของตัวแปร struct หรือ array โดย
มีหน่วยเป็นไบต์ ซึ่งสามารถหาได้จากฟังก์ชัน
sizeof(data type); หรือ sizeof(variable name);
count
เป็นจานวนครั้งที่ต้องการเขียนข้อมูลลงไฟล์
filePointerName เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไป
ยังไฟล์ที่ต้องการเขียนข้อมูล
27. การตรวจสอบสถานะของไฟล์ (File Status Function)
การตรวจสอบสถานะของไฟล์ (File Status Function) เป็นการ
ตรวจสอบการทางานของโปรแกรมกับไฟล์ว่าขณะนั้นไฟล์พอยน์เตอร์มีการ
ทางานกับไฟล์อย่างไร ไม่ว่าจะเป็นการตรวจสอบว่า อ่านข้อมูลจบไฟล์แล้ว
หรือไม่ เกิดข้อผิดพลาดในการทางานกบไฟล์หรือไม่ เป็นต้น มี 5 รูปแบบ
ดังนี้
1 การตรวจสอบ EOF (End of File) ด้วยฟังก์ชัน feof()
2 การตรวจสอบ Error ที่เกิดขึ้นกับไฟล์ด้วยฟังก์ชัน ferror()
3 การหาตาแหน่งที่อยู่ของไฟล์พอยน์เตอร์ด้วยฟังก์ชัน ftell()
4 การย้ายตาแหน่งไฟล์พอยน์เตอร์ไปยังตาแหน่งต้นไฟล์ด้วยฟังก์ชัน rewind()
5 การย้ายตาแหน่งไฟล์พอยน์เตอร์ด้วยฟังก์ชัน fseek()
28. การตรวจสอบ EOF (End of File) ด้วยฟังก์ชน feof()
ั
เราสามารถตรวจสอบว่าตอนนี้ไฟล์พอยน์เตอร์ชี้ที่ตาแหน่งท้ายสุด
ของไฟล์แล้วหรือไม่ (end of file) สามารถตรวจสอบได้โดยการเรียกใช้
ฟังกัน feof() โดยมีรูปแบบการใช้งานดังนี้
feof(filePointerName);
โดยที่
filePointerName
!
เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไป
ยังไฟล์ท่ต้องการตรวจสอบ
ี
การทางานของฟังก์ชัน feof() จะคืนค่ากลับมาเป็น integer ซึ่ง
เมื่อไหร่ก็ตามที่คืนค่าเป็น 0 แสดงว่าพอยน์เตอร์ชี้ที่ตาแหน่งท้ายสุดของ
ไฟล์แล้ว
29. การตรวจสอบ Error ที่เกิดขึ้นกับไฟล์ด้วยฟังก์ชัน ferror()
ในการตรวจสอบ Error ที่เกิดขึ้นกับไฟล์ เราสามารถตรวจสอบ
ได้โดยใช้ฟังก์ชัน ferror() โดยมีรูปแบบการใช้งานดังนี้
Ferror(filePointerName);
โดยที่
filePointerName
!
เป็นชื่อตัวแปรไฟล์พอยน์เตอร์ที่เราสร้างขึ้นเพื่อชี้ไป
ยังไฟล์ที่ต้องการตรวจสอบ
การทางานของฟังก์ชัน feof() จะคืนค่ากลับมาเป็น integer ซึ่ง
เมื่อไหร่ก็ตามที่คืนค่าเป็น 0 แสดงว่าพอยน์เตอร์ชี้ที่ตาแหน่งท้ายสุดของ
ไฟล์แล้ว
35. การลบไฟล์
เราสามารถที่ จะลบไฟล์ที่ ไ ม่ ต้องการใช้ ง านแล้ วได้โ ดยการเรีย กใช้
ฟังก์ชัน remove() โดยมีรูปแบบการใช้งานดังนี้
remove(“fileName”);
หรือ
remove(“pathFilename”);
โดยที่
fileName
เป็นชื่อไฟล์ที่เราต้องการลบ
pathFilename เป็นพาธที่อยู่และชื่อของไฟล์ที่ต้องการลบ
! การทางานของฟังก์ชัน remove() จะคืนค่ากลับมาเป็น integer ซึ่ง
เมื่อไหร่ก็ตามที่คืนค่าเป็น 0 แสดงว่าไม่มีข้อผิดพลาด (Error) เกิดขึ้น
37. ที่มา : คู่มืออบรมครูวิทยาศาสตร์ คณิตศาสตร์ คอมพิวเตอร์ โลก ดาราศาสตร์ และอวกาศ ระดับมัธยมศึกษาตอนปลาย
หนังสือเรียนรายวิชาเพิ่มเติม การเขียนโปรแกรมเบื้องต้นด้วยภาษา C บริษทซัคเซสมีเดีย
คู่มือเรียนเขียนโปรแกรมภาษา สานักพิมพ์ IDC PREMIER