วันนี้ผมต้องทำงานกับ CSV ไฟล์ใหญ่มาก เปิดด้วย excel ไม่ได้อีกทั้ง CSV ไฟล์มีการขึ้นบรรทัดใหม่แบบมั่วมาก ก็คือปกติ 1 row จะถือว่าเป็น 1 record แต่ว่ากรณีของผมนี่ 1 record อาจจะมีหลาย row และจำนวน column ก็มีเป็นร้อย อีกทั้ง data หลายๆ column เป็น Text หลักร้อยถึงหลายพันตัวอักษร แต่ผมก็เปิดมาแก้ไขได้ แค่ต้องมีเทคนิคนิดหน่อย
CSV คือ Text file
อยากให้ทำความเข้าใจเบื้องต้นก่อน ว่า CSV คือ Text file เหมือนที่เราเปิด Notepad แล้ว พิมพ์นั่นแหล่ะ แต่ว่ามันพิเศษตรงที่เค้าแบ่งเนื้อหา แต่ละ column ด้วยอะไรบางอย่าง เช่น Comma (ลูกน้ำ ,) หรือ Pipe | ก็ได้แล้วจะมีความกว้างของ column ที่เท่ากันเสมอทุก row เช่น มี 10 column ทุกๆบรรทัด หรือว่า content แต่ละ row ก็จะมี 10 column เสมอตลอดทั้งไฟล์ ถ้าบาง column ของบาง row เป็นค่าว่างเปล่า ก็จะยังต้องคั่นด้วยค่าว่างเช่นเช่นกัน เช่น 1,2,3,4,,6,7,8,,10 จะเห็นว่า ว่างไป สองค่า คือ 5 กับ 9 แต่ก็มีลูกน้ำคั่นไปตามปกติ
ไฟล์ CSV ขนาดใหญ่ ควรตัดแบ่งก่อน
เพราะว่าไฟล์ CSV ที่มีขนาดใหญ่ โดยเฉพาะระดับ GB ไม่ต้องพูดเลย เปิดยังไงก็ค้างถ้าเครื่องไม่ได้แรงเวอร์ๆ หรือว่า column น้อยมากๆ เราต้องตัดไฟล์มาเป็นชิ้นเล็กๆก่อน เช่นไฟล์ละ 10-100 MB ขึ้นอยู่กับเนื้อหาข้างในด้วยครับ อันนี้ตอบได้ยาก ว่าขนาดเท่าไรถึงจะเหมาะ เพราะว่า ตัดไฟล์เล็กไปจะทำให้ได้ไฟล์เยอะมาก ตัดใหญ่ไปก็เปิดช้าอีก
การตัดไฟล์ ให้ใช้โปรแกรม HJSPLIT
เป็นโปรแกรมเก่ามาก อยู่มานาน จนวันนี้ก็ยังใช้งานได้ดีอยู่ โหลดมาใช้ได้เลย ไม่ต้องติดตั้ง กด โหลด http://www.hjsplit.org/
เมื่อเปิดโปรแกรมมาแล้ว จะพบว่ามีเมนู split เราก็เลือก Import file CSV เราเลยครับ แล้วใส่ขนาดที่เราต้องการให้ตัด เช่น ตัดครั้งละ 20 Megabyte เบื้องต้น ผมแนะนำให้ใส่น้อยๆก่อนเพราะว่า เราต้องการทดสอบว่าหน้าตามันเป็นอย่างไร เพราะเราไม่เคยเปิดออกเลย จริงหรือเปล่า เมื่อเรามั่นใจแล้วเราค่อยสั่งตัดใหม่ด้วขนาดใหญ่ขึ้น จนกว่าคอมจะเริ่มช้าเวลาใช้งาน ขนาดนั้นก็น่าจะใหญ่สุดเท่าที่เป็นไปได้ครับ สำหรับการใช้งานครั้งแรก ถ้ามันเริ่มตัดไฟล์ที่ 3 เมื่อไร ก็กด cancel ได้นะครับ ไม่ต้องรอตัดเสร็จ (แต่ถ้าต้องการใช้ไฟล์ทั้งหมดทุกไฟล์ก็ต้องตัดจนเสร็จ)
เทคนิคการตัดไฟล์ CSV
ปกติหน้าตาไฟล์ CSV จะเป็นแบบนี้
แต่ว่าการตัด อาจจะทำให้เกิดเหตุการณ์บรรทัดสุดท้ายไฟล์ขาดได้ ดังนี้
จะเห็นได้ว่า ไฟล์บรรทัดที่ 1234 บรรทัดสุดท้ายของไฟล์แรกที่ตัดออกมา มันไม่เต็มบรรทัด เพราะส่วนที่เหลือไปอยู่เป็นต้นไฟล์ของ ไฟล์ที่ตัดมาชิ้นที่ 2 แยกกันไป ดังนั้น รอยต่อไฟล์พวกนี้เราต้องซ่อมให้เป็นหน้าตาแบบนี้ครับ
จะเห็นได้ว่า ผมย้ายท่อนที่ขาดไปจากไฟล์ที่สอง มาใส่ไฟล์ที่ 1 และผม เติม header ใส่ในไฟล์ที่สอง เพื่อให้ไฟล์ทำงานได้โดยสมบูรณ์คือมี column ในแต่ละไฟล์เองด้วย
การทำงานกับ CSV ควรใช้ โปรแกรม OpenOffice Calc
จากประสบการณ์ของผมที่ทำงานกับ CSV พบว่า OpenOffice Calc นี่เหมาะสมมากที่สุดสำหรับการทำงานบน CSV มากกว่า excel เป็นไหนๆ เพราะว่า ไม่ต้องประสบปัญหาเรื่องการแปลงหน่วยตัวเลข แปลงวันที่ หรือ ตัด 0 ข้างหน้าออก เรื่องจุกจิกเหล่านี้เจอใน excel เป็นเรื่องปกติ แต่ OpenOffice Calc ทำงานกับ CSV ได้สบายมาก download OpenOffice Calc ได้จาก https://www.openoffice.org/download/index.html ตอนติดตั้ง ก็ไม่ต้องติดตั้ง Writer,Impress,Base, Math ก็ได้ครับ ติดตั้งแต่ Calc ก็พอ
เท่านี้ ผมบอกได้เลยว่าเจอไฟล์ขนาดใหญ่แค่ไหนก็ไม่ต้องกลัวครับ โดยทั้งหมดนี่ หัวใจสำคัญก็คือ ต้องอ่าน pattern ตอนต่อหัวท้ายของไฟล์ให้ออก และตอนที่เปิดไฟล์มาต่อหัวท้าย ก็เปิดด้วย Notepad2 ได้เลยครับ (อธิบายโปรแกรมนี้ไปเมื่อวาน)