GORAGOD.com

GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ช่วยออกแบบโปรแกรม Import ไฟล์ เกี่ยวกับ Text File หน่อยครับ


ปัญหามีอยู่ว่า มี Text file (CSV) ทั้งหมด 40 แบบ ซึ่งไม่เหมือนกันเลย

แต่ละแบบ มีข้อมูลที่เราต้องการอยู่วางไม่เหมือนกันแต่ละไฟล์


เช่น ข้อมูล บางไฟล์วางไว้ที่ A:2 บางไฟล์วางที่ A:5

ทำให้เราไม่สามารถ กำหนดได้เลยว่าเราจะเลือกตัดไปใส่ใน Database และข้อมูลมีทั้งหมดประมาณ 15 Field


เราจะทำการออกแบบอย่างไรให้สามารถจัดการกับข้อมูลเหล่านี้ และสามารถดึงข้อมูลมาใช้ได้อย่างง่ายขึ้น

27 ก.ย. 2553 3 2,261


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



งั้นผมเสนอแนวทางนึงละกัน... กรณีที่ไม่มีจุดร่วมใดๆเลยที่จะมาเป็นตัวบอกว่าจะเป็นรูปแบบไหน เช่น ชื่อไฟล์ หรือไม่มีหัวตาราง แต่คิดว่าน่าจะมีลักษณะเฉพาะของฟิลดิ์ (น่าจะมีนะ)...



1. ก่อนอื่นก็ต้องหาลักษณะเฉพาะตัวของฟิลดิ์ต่างๆออกมาก่อน เพื่อใช้ในการเขียนฟังก์ชั่นตรวจสอบ เช่น ฟิลดิ์ที่เก็บบัตรประชาชนก็ต้องมี 13 หลัก หรือฟิลดิ์ descript ก็น่าจะเป็นฟิลดิ์ที่ยาวพอสมควร (น่าจะมากกว่าชื่อ-นามสกุล) ฟิลดิ์ราคาก็น่าจะเป็นฟิลดิ์ที่มีตัวเลขพร้อมจุดทศนิยม เป็นต้น ถ้าทุกๆฟิลดิ์มีเอกลักษณ์เฉพาะตัวแตกต่างชัดเจนก็เป็นไปได้ที่จะผ่านได้ครับโปรเจคนี้

2. ขั้นตอนการนำเข้าก็ใช้ฟังก์ชั่นที่ใช้ตรวจสอบแต่ละแบบ (ถ้ามี 10 ฟิลดิ์ก็ 10 แบบ) ตรวจสอบทุกฟิลดิ์ก่อน เพื่อใช้ในการตัดสินใจว่าฟิลดิ์นั้นจะนำเข้า Database ฟิลดิ์ไหน สมมติฟิลดิ์แรกสามารถตรวจสอบได้ว่าเป็นเลข 13 หลักก็ตั้งค่าตัวแปรฟิลดิ์ที่ 1 เป็น cid ประมาณนี้ โดยการตรวจสอบอาจจะตรวสอบสัก 5-10 เรคคอร์ดก็ได้ตามความจำเป็น

3. เมื่อตรวสอบเรียบร้อยแล้วก็ import เข้า database ได้เลย



การใช้ฟังก์ชั่นตรวจสอบแบบนี้อาจจะต้องคำนึงถึง performance ของระบบด้วย ในตอนที่ผมทำนั้นมีการปรับเปลี่ยนข้อมูลภายในฟิลดิ์ด้วย


#1

คำถามดูแปลกๆนะ ลองขยายความนิดนึง



ผมไม่เข้าใจว่า 40 แบบ หมายถึงอะไร ไฟล์ csv 40 แบบ import ใส่ตาราง 40 ตาราง (คนละตาราง ไม่ซ้ำกัน) หรือว่า



ไฟล์ csv ท ี่เป็นไปได้ 40 แบบ import ใส่ตารางเดียว



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



ส่วนกรณีที่ 2 คงจำเป็นต้องหาจุดร่วม ว่า รายการไหน ควรจะเป็นข้อมูลใด หากข้อมูลเป็นแค่การสลับคอลัมน์ ก็ไม่คิดว่าน่าจะยากนะ หากข้อมูลเป็นการระบุหัวคอลัมน์ที่แตกต่างกัน อันนี้เราอาจใช้ if ในการเลือกได้ (โดยส่วนตัวผมใช้ Array)



ในทางปฏิบ้ติ วิธีเดียวที่จะทำได้ก็คือ เราต้องดูว่า เรา(มนุษย์)ใช้อะไรเป็นเครื่องตัดสินใจว่าข้อมูลนั้นๆ จะใส่ลงในฟิลด์ไหน ให้เราเขียนคำสั่งให้เป็นไปตามที่เราคิดครับ เช่น ฟิลด์ name จะต้องมีอะไรบ้าง ถึงจะเข้าองค์ประกอบของข้อมูลทีควรจะเป็น name ซึ่ง จะต้องดูจากข้อมูลที่เป็นไปได้ทั้งหมดที่มี และ ฐานข้อมูลครับ ซึ่งคงไม่มีใครออกแบบให้ใครได้ นอกจากคนที่รู้กฏของมันเท่านั้น



<?php

$data = 10.50;

$data = '27-09-2553';

if(preg_match('/[0-9]+\.[0-9]{2,2}/', $data)) {

  // ฟิลด์ จำนวนเงิน เช่น 10.50

} elseif (preg_match('/[0-3]?[0-9]\-[0-1]?[0-9]\-[0-9]{4,4}/', $data)) {

  // ฟิลด์ วันที่ 27-09-2553

}

?>

#2


ไฟล์ 40 แบบใส่ตารางเดียวคับผม ซึ่งแต่ละ Colum ข้อมูลอยู๋ไม่เหมือนกันใน 40 ไฟล์ ที่เป็นปัญหาเพราะว่าลูกค้าส่งข้อมูลมาไม่เหมือนกัน รายละเอียดแค่คล้ายกันครับ



ขอบคุณทั้งสองท่านมากๆครับ พอดีผมก็คิดว่าจะทำแบบเช็คก่อนว่าข้อมูลตามเงื่อนไขหรือไม่ ถ้าใช่ก็เอาลง Database

แต่เพื่อมีท่านใดมีวิธีการที่น่าจะทำได้ดีกว่าครับ เพราะว่ากัวสิ่งที่ผมคิดว่าจะทำ ถ้าผมจะทำขึ้นมาจริงๆ ถ้า ฟิวด์เยอะๆ คงแย่ๆแน่เลย

 


#3
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 64M
^