560 likes | 680 Views
บทที่ 11 แฟ้มข้อมูล. OUTLINE 1. ความหมายของคำว่าไฟล์ 2. ประเภทของไฟล์ 3. ขั้นตอนการทำงานกับไฟล์ 4. คำสั่งพื้นฐานเกี่ยวกับไฟล์. ความหมาย. แฟ้มข้อมูล (file) เป็นแหล่งเก็บข้อมูล ข้อมูลในไฟล์หนึ่งๆจะเก็บข้อมูลเรื่องเดียวกัน
E N D
บทที่ 11แฟ้มข้อมูล • OUTLINE 1. ความหมายของคำว่าไฟล์ 2. ประเภทของไฟล์ 3. ขั้นตอนการทำงานกับไฟล์ 4. คำสั่งพื้นฐานเกี่ยวกับไฟล์
ความหมาย • แฟ้มข้อมูล(file) เป็นแหล่งเก็บข้อมูล ข้อมูลในไฟล์หนึ่งๆจะเก็บข้อมูลเรื่องเดียวกัน • ข้อมูลที่เก็บในไฟล์ อาจเป็น ข้อมูล(data file) หรือ โปรแกรม(program file)
ประเภทของไฟล์ • ไฟล์ในปาสคาล มี 3 ประเภท คือ • Typed file • Text file(ไม่ลงรายละเอียด) • Untyped file (ไม่ลงรายละเอียด)
ประเภทของไฟล์ • Typed file เป็นไฟล์ที่มีการระบุโครงสร้างหรือชนิดข้อมูลที่แน่นอนโดยแต่ละเรคอร์ดมีความยาวคงที่ • Text file เป็นไฟล์ที่เก็บข้อมูลชนิดข้อความมีความยาวไม่คงที่และมีตัว carriage return และ Line feed เป็นตัวบ่งบอกการจบเรคอร์ด
ประเภทของไฟล์ • Untyped file เป็นไฟล์ที่ไม่มีข้อกำหนดทางโครงสร้าง หรือการจัดเรียงข้อมูลในไฟล์ จึงสามารถอ่านไฟล์ที่ไม่ได้สร้างโดยปาสคาลได้เช่น Dbase , Lotus 1-2-3
ขั้นตอนการทำงานกับไฟล์ขั้นตอนการทำงานกับไฟล์ • การทำงานบนแฟ้มข้อมูลมีขั้นตอนดังนี้ 1. มีการสร้างแฟ้มข้อมูล(create file) 2. มีการเรียกใช้ข้อมูลจากแฟ้ม (retrieve file) เพื่อทำการปรับปรุงข้อมูล (ค้นหา ลบ เพิ่ม หรือ แก้ไข)
ขั้นตอนการทำงานกับไฟล์ขั้นตอนการทำงานกับไฟล์ • สร้างตัวแปร เมื่อต้องการสร้างหรือเรียกใช้ไฟล์ข้อมูล ภายในโปรแกรมต้องประกาศตัวแปรที่มีชนิดเป็นแฟ้มข้อมูล VAR F: file of real; • กำหนดไฟล์ในแผ่นดิสก์(Assign)ให้ตัวแปร เนื่องจากข้อมูลมักเก็บไว้ในสื่อบันทึก เช่น แผ่นดิสก์ เพื่อให้ทราบว่าตัวแปร F เชื่อมโยงกับแฟ้มข้อมูลใดในแผ่นดิสก์ สามารถทำได้โดยคำสั่ง ASSIGN
คำสั่ง ASSIGN • รูปแบบ b:\mydoc\pascal\student.dat • ชื่อไดรฟ์ ชื่อ PATH ชื่อไฟล์ ชนิดของไฟล์ ASSIGN(F,’b:mydoc\pascal\student.dat’); Assign (ตัวแปร, ชื่อไฟล์ในดิสก์)
คำสั่ง ASSIGN • ชื่อไดรฟ์เป็นตัวอักษร (a-z)ตามด้วย : หากไม่ระบุชื่อไดรฟ์จะหมายถึงไดรฟ์ปัจจุบันที่กำลังใช้อยู่ • ชื่อ PATH คือชื่อไดเรกทอรีย่อยที่ใช้ขั้นโดยเครื่องหมาย \ • ชื่อไฟล์มีเป็นตัวอักษรมีความยาว 8 ตัว • นามสกุล มีความยาวไม่เกิน 3 ตัวอักษรใช้ dat เพราะเป็นแฟ้มที่ใช้เก็บข้อมูล
คำสั่งพื้นฐานเกี่ยวกับไฟล์คำสั่งพื้นฐานเกี่ยวกับไฟล์ • คำสั่งพื้นฐานเกี่ยวกับไฟล์ • เปิดไฟล์ • อ่าน/บันทึก ข้อมูลจากไฟล์ • ปิดไฟล์ • คำสั่งเหล่านี้มีการใช้ต่างกันขึ้นอยู่กับประเภทของไฟล์
คำสั่งพื้นฐานเกี่ยวกับไฟล์คำสั่งพื้นฐานเกี่ยวกับไฟล์ • คำสั่งเปิดไฟล์ เป็นการเปิดการสื่อสารระหว่างเครื่องคอมพิวเตอร์กับสื่อบันทึก โดยไฟล์อาจเป็น Input หรือ Output อย่างเดียว หรือเป็น Input และ Output ในขณะเดียวกัน คำสั่งเปิดไฟล์ได้แก่ rewrite , reset
คำสั่งพื้นฐานเกี่ยวกับไฟล์คำสั่งพื้นฐานเกี่ยวกับไฟล์ • คำสั่ง อ่าน/บันทึก ข้อมูลบนไฟล์ คำสั่งที่ใช้อ่าน หรือ บันทึกข้อมูลมีการใช้ต่างกันข้อยุ่กับประเภทของไฟล์ เช่น read, blockread , write, writeblock
คำสั่งพื้นฐานเกี่ยวกับไฟล์คำสั่งพื้นฐานเกี่ยวกับไฟล์ • คำสั่งปิดไฟล์ ทุกครั้งที่เลิกใช้ไฟล์ต้องทำการปิดไฟล์ ด้วยคำสั่ง Close เพราะ • การปิดจะนำข้อมูลที่อยู่ในบัฟเฟอร์เก็บไว้ในแผ่นดิสก์ • คำสั่งปิดจะทำการปรับปรุงไฟล์ในไดเรกเทอรี โดยจะนำชื่อไฟล์ไปเก็บไว้ในไดเรกเทอรีสำหรับการสร้างไฟล์ครั้งแรก หรือเก็บจำนวนเรคอร์ด
คำสั่งเปิดไฟล์REWRITE • Rewrite (ตัวแปรไฟล์) • เปิดเพื่อบันทึกข้อมูล • ใช้กรณีที่ไม่เคยมีไฟล์ข้อมูลในแผ่นดิสก์มาก่อน • หากมีไฟล์ข้อมูลอยู่ก่อน rewrite จะทำการลบข้อมูลเดิมหมดเหลือแต่ไฟล์เปล่า • ห้ามเปิดไฟล์เก่าด้วยคำสั่ง rewrite • ใช้ได้กับไฟล์ทุกประเภท
คำสั่งเปิดไฟล์RESET • Reset(ตัวแปรไฟล์) • เป็นการเปิดเพื่ออ่านข้อมูลจากดิสก์ • หากไม่มีไฟล์ในแผ่นดิสก์แล้วเปิดโดย reset จะเกิด I/O error • การเปิดไฟล์โดย rewrite หรือ reset ตัว file pointer อยู่ที่เรคอร์ดแรกของไฟล์(เรคอร์ดที่ 0) เสมอ
คำสั่งเปิดไฟล์APPEND • Append (ตัวแปรไฟล์) • เป็นการเปิดไฟล์เพื่อทำการบันทึกข้อมูลเพิ่มเติม • หากไม่มีไฟล์ในแผ่นดิสก์แล้วเปิดโดย append จะเกิด I/O error • file pointer อยู่ตอนท้ายของเรคอร์ดสุดท้าย จึงสะดวกต่อการเพิ่มเรคอร์ด (add record)
คำสั่งอ่าน/บันทึกข้อมูลคำสั่งอ่าน/บันทึกข้อมูล • Read และ write เป็นคำสั่งที่ใช้กับไฟล์แบบ typed file และ text file มีรูปแบบเหมือนกัน แต่การใช้มีข้อปลีกย่อยต่างกัน • Readln และ writeln เป็นคำสั่งใช้เฉพาะ text file เท่านั้น • blockread และ blockwrite ใช้กับ Untyped file
คำสั่งอ่าน/บันทึกข้อมูลใน TYPED FILE • Read (F, V1,[V2,..Vn]) • F คือตัวแปรไฟล์ V เป็นตัวแปรประเภทเดียวกับไฟล์ • เมื่ออ่านข้อมูลเสร็จ file pointer จะเลื่อนไปยังเรคอร์ดถัดไป • write (F, V1,[V2,..Vn]) • บันทึกข้อมูลต้องที่ file pointer ชี้อยู่ • เมื่อบันทึกเสร็จ file pointer จะเลื่อนไปยังเรคอร์ดถัดไป
ตัวอย่างโปรแกรมTyped file • ตัวอย่างต่อไปนี้แสดง • การสร้างไฟล์แบบString • การบันทึกข้อมูลลงไฟล์ • การอ่านข้อมูลจากไฟล์ • การค้นหาข้อมูลจากไฟล์
ตัวอย่างโปรแกรมTyped file program createfile; uses wincrt; var ans:char; procedure buildfile; var fname: file of string; name: string;
ตัวอย่างโปรแกรมTyped file begin assign(fname,'name.dat'); {link file name with file in disk} rewrite(fname); {open file} write('Enter student''s name.(xxx for end)'); readln(name);
ตัวอย่างโปรแกรมTyped file while name <> 'xxx' do begin write(fname,name); {write data into file} write('Enter student''s name.(xxx for end)'); readln(name); end; close(fname); end;
ตัวอย่างโปรแกรมTyped file procedure r_w_file; var fname: file of string; name: string; begin assign(fname,'name.dat'); reset(fname); clrscr;
ตัวอย่างโปรแกรมTyped file writeln('List of student name'); while not eof(fname) do begin read(fname,name); writeln(name:20); end; close(fname); readln; end;
ตัวอย่างโปรแกรมTyped file procedure search; var fname: file of string; name,s_name: string; flag :char; begin assign(fname,'name.dat'); reset(fname); clrscr;
ตัวอย่างโปรแกรมTyped file write('Enter name you want to search(x for end): '); readln(s_name); read(fname,name); flag := 'n'; while (s_name <> 'x') do begin
ตัวอย่างโปรแกรมTyped file while not eof(fname) and (flag <> 'y') do begin if name = s_name then flag := 'y' else read(fname,name) end;
ตัวอย่างโปรแกรมTyped file if flag = 'y' then begin writeln(s_name,' is found '); reset(fname); end else writeln(s_name,' is not found');
ตัวอย่างโปรแกรมTyped file readln; reset(fname); clrscr; write('Enter name you want to search(x for end): '); readln(s_name); read(fname,name); flag := 'n'; end; end;
ตัวอย่างโปรแกรมTyped file begin ans := 'y'; repeat clrscr; writeln('Enter the following number(x to stop): '); writeln('1= create file'); writeln('2= read and display data'); writeln('3= search name');
ตัวอย่างโปรแกรมTyped file readln(ans); case ans of '1': buildfile; '2': r_w_file; '3': search; end; until ans = 'x'; end.
ตัวอย่างโปรแกรมTyped file • ตัวอย่างการสร้างไฟล์ ที่เก็บแบบเรคอร์ด • การสร้างและบันทึกไฟล์ • การอ่านไฟล์ • การเพิ่มเรคอร์ด • การปรับปรุงเรคอร์ด
คำสั่งอ่านข้อมูลใน TEXT FILE • Read (F, V1,[V2,..Vn]) และ write (F, V1,[V2,..Vn]) • F ตัวแปรข้อมูลที่เป็น Text file เท่านั้น • V เป็นตัวแปรชนิดใดก็ได้ (char,integer,real,string) • กรณีไม่มี F แสดงว่ารับข้อมูลจากแป้นพิมพ์ (ที่หัวโปรแกรมไม่มี input) • เมื่ออ่านข้อมูลเสร็จ file pointer จะเลื่อนไปหลังตัวอักษรสุดท้ายที่อ่าน
คำสั่งอ่านข้อมูลใน TEXT FILE • Readln (F, V1,[V2,..Vn]) และ writeln (F, V1,[V2,..Vn]) • เมื่ออ่านข้อมูลเสร็จ file pointer จะเลื่อนไปต้นบรรทัดถัดไปของไฟล์ โดยข้าม CR/LF
คำสั่งบันทึกข้อมูลใน TEXT FILE • write (F, V1,[V2,..Vn]) • F ตัวแปรข้อมูลที่เป็น Text file เท่านั้น • V เป็นตัวแปรชนิดใดก็ได้ (char,integer,real,string) • กรณีไม่มี F แสดงว่าแสดงข้อมูลทางจอภาพ (ที่หัวโปรแกรมไม่มี output)
คำสั่งบันทึกข้อมูลใน TEXT FILE • writeln (F, V1,[V2,..Vn]) • เมื่อบันทึกข้อมูลเสร็จ จะพิมพ์เครื่องหมาย CR/LF คั่นแต่ละเรคอร์ด
program recfile; uses wincrt; type student = record id : string[7]; name: string[15]; mark: integer; end; var studentrec : student; fstudent: file of student; name: string[20]; finame: string[8]; ans,choice :char; ตัวอย่างโปรแกรมการสร้างและบันทึกไฟล์ แบบเรคอร์ด
ตัวอย่างโปรแกรมการสร้างและบันทึกไฟล์ แบบเรคอร์ด begin clrscr; write ('Enter filename you want to create: '); readln(finame); assign(fstudent,finame); {link file name with file in disk} rewrite(fstudent); {open file } ans := 'Y';
ตัวอย่างโปรแกรมการสร้างและบันทึกไฟล์ แบบเรคอร์ด repeat with studentrec do begin clrscr; writeln; write('Enter student''s id. :'); readln(id); write('Enter student''s name :'); readln(name); write('Enter student''s mark :'); readln(mark); end;
ตัวอย่างโปรแกรมการสร้างและบันทึกไฟล์ แบบเรคอร์ด write(fstudent,studentrec); {write data into file} write('Enter y/n to continue: '); readln(ans); ans := upcase(ans); until ans = 'N'; close(fstudent); end.
program readrec; uses wincrt; type student = record id : string[7]; name: string[15]; mark: integer; end; var studentrec : student; fstudent: file of student; name: string[20]; finame: string[8]; ans,choice :char; ตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ด
ตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ด begin clrscr; write ('Enter filename you want to read: '); readln(finame); assign(fstudent,finame); {link file name with file in disk} {$I-}reset(fstudent);{$I+} คอมไพล์ไดเรกทีฟ ใช้ป้องกัน I/O Error
ตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ด if ioresult = 0 then begin clrscr; writeln('List of student''s score':45); writeln; writeln('id. ':10,' name ':20,' mark ':17); เป็นฟังก์ชันตรวจสอบผลของ I/O Error
ตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ด while not eof(fstudent) do begin read(fstudent,studentrec); with studentrec do writeln(id:10,name:20,mark:15);writeln; end;
ตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการอ่านไฟล์แบบเรคอร์ด close(fstudent); end else writeln('file not exit'); readln; end.
program addrec; uses wincrt; type student = record id : string[7]; name: string[15]; mark: integer; end; var studentrec : student; fstudent: file of student; name: string[20]; finame: string[8]; ans,choice :char; ตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ด
ตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ด begin clrscr; write ('Enter filename you want to add record: '); readln(finame); assign(fstudent,finame); {$I-} reset(fstudent);{$I+}
ตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ด if ioresult = 0 then begin seek(fstudent,filesize(fstudent)); {go to the last record} ans := 'Y'; while ans <> 'N' do begin - Seek เป็น Function ทำให้ตัวชี้ไปอยู่ ที่เรคอร์ดสุดท้าย - filesize เป็น Function ให้จำนวนเรคอร์ด ในแฟ้มข้อมูล
ตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ด with studentrec do begin clrscr; writeln; write('Enter student''s id. :'); readln(id); write('Enter student''s name :'); readln(name); write('Enter student''s mark :'); readln(mark); end;
ตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ดตัวอย่างโปรแกรมการเพิ่มเรคอร์ดในไฟล์แบบเรคอร์ด write(fstudent,studentrec); {write data into file} write('Enter y/n to continue: '); readln(ans); ans := upcase(ans); end; end else