เมื่อก่อนเคยใช้ฟังก์ชันพวก sub string หรือ split string
แต่พอมาเขียน report บางครั้งจะใช้พวกนี้ แต่ผมหาฟังก์ชันมันไม่เจออ่ะครับ
พอดีไปอ่านเจอกระทู้ ของ อ.นาจ เกี่ยวกับการเขียนฟังก์ชัน ก็เลยลองดูครับ
Function อาจเอาไปประยุกต์ใช้กับ report ได้ครับ
เช่น - การแยกเอาอำเภอ หรือ ตำบล มาแสดง
- query ข้อมูลโดยการ Concat แล้วมาแยกสตริง (ไม่รู้ว่าจะเร็วขึ้นหรือเปล่า) กำลังจะลองครับ
- pack คำสั่งสำหรับ query ใหม่
ฟังก์ชัน Sub str
รับค่า String กับตำแหน่งเริ่มต้นกับสุดท้ามา แล้วก็รีเทิน sub string
function substr(str:String;s_index:Integer;e_index:Integer):String;
begin
result:= Copy(str,s_index,e_index-s_index);
end;
ฟังก์ชันแยกสตริง เรียกใช้ฟังก์ชัน substr อีกทีครับ
รับค่าสตริง แล้วอักขระที่ใช้ในการแยก
ตัวอย่างนี้ผมแยกแล้ว pack string ใหม่ จาก 123,456
แยก 123 กับ 456 ออกจากกัน แล้วเปลี่ยนรูปแบบให้เป็น "123","456"
เวลาเอาไปใช้ต้องแก้ในฟังก์ชันนี้ก่อนนะครับว่าต้องการผลลัพธ์แบบไหน
เพราะผมยังหาวิธีใช้ array มารับค่าไม่ได้เลยครับ
function splitstr(str,split:String):String;
var i_start,i_end,index:Integer;
temp,return:String;
begin
i_start:=1;
i_end := Length(str);
return:='';
for index := 1 to i_end do
begin
temp:=substr(str,index,index+1);
if CompareText(temp,split)=0 then
begin
return := return +'"' + substr(str,i_start,index)+'",';
i_start := index +1;
end;
end;
return := return +'"' +substr(str,i_start,i_end+1)+'"';
Result:=return;
end;
ปล. แต่ถ้ามีฟังก์ชันพวกนี้อยู่แล้วก็แนะนำด้วยนะครับ หาไม่เจอจริง ๆ
ปล.2 ขอบคุณ อ. naj สำหรับสอนเขียนฟังก์ชันครับ