คือผมพยายามที่จะดึงข้อมูลที่ต้องการออกจากรายงานที่ได้จากอีกระบบหนึ่ง ซึ่งเค้าใช้โปรแกรมเล็ก ๆ ในการแปลงจาก text ออกมาเป็นชุดข้อมูลแต่ปัญหาคือไม่มีคน แก้ source code ได้และไม่รู้ว่าเก็บชุดล่าสุดไว้ที่ไหน เลยเป็นปัญหาที่มาของคำถามเนื่องจากชุดข้อมูลมีลักษรณะเป็น 2-3 Layer คือ ตามไฟล์แนบ
ซึ่งผมก็ทดลองจับออกมาได้ด้วย regular expression ด้วย patternรายงาน....วันที่...ถึง...
สำหรับสาขา 0000
ลำดับ วันที่ รหัสประจำตัว ชื่อผู้ขาย จำนวนเงินสุทธิ มูลค่าเพิ่ม
สาขาที่
1 1/1/2015 0123456789023 บริษัท..A... 1000.00 70.00
0000 สำนักงานใหญ่
2 11/1/2015 0123456789024 บริษัท..B... 1000.00 70.00
0001 สาขาAAA
รวม 2 ข้อมูล 2000.00 140.00
รายงาน....
วันที่...ถึง...
สำหรับสาขา 0001
ลำดับ วันที่ รหัสประจำตัว ชื่อผู้ขาย จำนวนเงินสุทธิ มูลค่าเพิ่ม
สาขาที่
1 1/1/2015 0123456789025 บริษัท..C... 2000.00 140.00
0000 สำนักงานใหญ่
2 11/1/2015 0123456789024 บริษัท..B... 1000.00 70.00
0001 สาขาAAA
3 1/1/2015 0123456789025 บริษัท..C... 2200.00 140.00
000 สาขาBBB
รวม 3 ข้อมูล 5200.00 364.00
รวมทั้งสิ้น 5 ข้อมูล 7200.00 504.00แต่มันไม่ได้ประโยค "สำหรับสาขา....." ออกมาเพื่อจัดให้ชุดข้อมูลว่ารายงานนี้มาจากสาขาไหน (ลองดูได้จาก message box ใน excel ที่แนบท้าย) นอกจากจะกลับไปใช้การอ่านtextทีละบรรทัด แล้วจับลูปว่าได้สาขาที่.... แล้วค่อยหาชุดข้อมูลผมก็ลองทำแต่มันจะได้แค่บรรทัดแรกบรรทัดเดียว ไม่สามารถจับบรรทัดที่สองได้คือขยายความว่าจะได้แต่บรรทัดPHP Code:
"^ \d*.*\n.*"
1 1/1/2015 0123456789025 บริษัท..C... 2000.00 140.00
แต่ขาด
0000 สำนักงานใหญ่
ไป
ส่วนตัวพยายามคิดว่าถ้า regex จับชุดใหญ่ได้โดยเริ่มจาก
สำหรับสาขา 0000
....
....
....
รวม 2 ข้อมูล 2000.00 140.00
(แต่ติดปัญหาว่าเขียน regex.pattern แบบนี้ไม่เป็น เพราะบรรทัดไม่เท่ากันเสมอไป)
แล้วค่อยเอา pattern ที่ใช้จับ detail ในตอนแรกไปจับอีกชั้นหนึ่ง
พอจะมีแนวทางแก้ปัญหาการเขียนโปรแกรมแบบนี้ไหมครับ?
ขอบคุณครับ