บันทึกและอ่านไฟล์แบบ CSV

โดยปกติแล้วการพัฒนาระบบงานที่เป็นจริงเป็นจัง เราคงหลีกเลี่ยงไม่ได้ที่จะต้องบันทึกข้อมูลที่เราทำไว้เพื่อเรียกมาใช้ในภายหลังไม่อย่างใดก็อย่างหนึ่ง ทั้งการบันทึกเพื่อการตรวจสอบ หรือบันทึกเพื่อมาทำต่อภายหลัง แม้กระทั่งเพื่อจะต่อข้อมูลจากระบบหนึ่งข้ามไปสู่ระบบอื่นๆ การบันทึกและอ่านไฟล์ลงใน หน่วยความจำโดยตรง ก็เป็นอีกวิธีการหนึ่งที่นิยมเพราะง่ายและทำได้โดยลำพังไม่ต้องการการเชื่อมหรือติดตั้ง Service ใดๆเพิ่มเติมอีก วันนี้ผมจึงนำเสนอวิธีการในการบันทึกลงไฟล์ครับ

ในการบันทึกข้อมูลลงไฟล์ของ PHP นั้น มีการสร้างฟังก์ชั่นไว้รองรับอยู่แล้ว 4 ฟังก์ชั่นคือ
  • fopen() - สร้างไฟล์ใหม่ / เปิดไฟล์
  • fwrite() - เขียนลงในไฟล์ที่เปิดอยู่
  • fread() - อ่านข้อมูลในไฟล์ขึ้นมาใช้
  • fclose() - ปิดไฟล์เมื่อใช้งานเสร็จ


อันที่จริงแล้วฟังก์ชั่นเหล่านี้ถือว่าอเนกประสงค์นะครับ ใช้ได้ครอบคลุมกับไฟล์ทุกแบบ แต่ไฟล์แต่ละแบบก็จะมีลักษณะและข้อกำหนดที่ต่างกันออกไป ซึ่งวันนี้ผมตั้งใจจะเขียนถึงไฟล์ประเภท CSV ครับ



CSV คืออะไร? 



CSV ย่อมาจาก Comma Separated Values แปลแบบรวบรัดว่า "คั่นระหว่างข้อมูลด้วยคอมม่า" และนั่นเป็นข้อกำหนดหลักข้อเดียวของไฟล์ประเภทนี้ครับ จากภาพประกอบคุณคงพอเห็นแล้วว่า ไฟล์ประเภท CSV มีรูปแบบที่เรียบง่าย และสร้างได้เองจากโปรแกรมทั่วไป และเพราะง่ายนี่แหละครับทำให้มันเป็นรูปแบบไฟล์ยอดนิยมรูปแบบหนึ่งที่ใช้งานกันอย่างแพร่หลายมากทีเดียว ทำให้มันสามารถนำไปใช้ต่อในแบบต่างๆ เช่นเปิดมาใช้งานในโปรแกรม MS Excel หรือใช้กับการนำข้อมูลตั้งต้นใส่เข้าไปในฐานข้อมูลเป็นต้น

ในการสร้างและอ่านไฟล์ CSV จะมีฟังก์ชั่นเสริมทัพอีก 2 ตัวครับ คือ

  • fputcsv() - เขียนเป็นไฟล์แบบ CSV
  • fgetcsv() - อ่านไฟล์แบบ CSV
สำหรับ Syntax Diagram และตัวอย่างอื่นๆ ไปลองหาอ่านดูนะครับ สำหรับท้ายบทความนี้แสดง Code ไว้ให้ดูต่างหน้าละกันนะครับ

ฝั่งเขียนไฟล์

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
// ข้อมูลที่ต้องการเก็บ
$list = array( 
"10,กรุงเทพมหานคร,13.7538762095,100.5017709732",
"11,สมุทรปราการ,13.640081,100.750065"
);
// บันทึกข้อมูลลงไฟล์ contacts.csv
$file = fopen("province.csv","w");
foreach ($list as $line){
   fputcsv($file,explode(',',$line));
}
// ปิดไฟล์
fclose($file); 
?>

หมายเหตุ 
กรณีมีภาษาไทยปนในข้อความแล้วทำให้เกิดปัญหา อาจลองใช้คำสั่ง setlocale เพื่อแจ้งให้ php รู้ว่าในนั้นมีรหัสภาษาไทยแทรกอยู่ในอักขระด้วย ต้องแก้ setlocale ( LC_ALL, 'en_US.UTF-8' ); เป็น setlocale ( LC_ALL, 'Thai' ); ครับ

แสดงความคิดเห็น

0 ความคิดเห็น