6.3.2
การค้นหาและแทนที่ข้อความ
6.3.2.1
การใช้คำสั่ง
Mid()
คำสั่ง
Mid()
ในภาษา
OpenOffice
/ LibreOffice Basic มีคุณสมบัติที่น่าสนใจ
คือ
เราสามารถใช้ค้นหาและเปลี่ยนเนื้อหาให้เป็นข้อความตามที่กำหนดได้
(ค้นหาและแทนที่) โดยมีเงื่อนไขคือ
เราต้องทราบตำแหน่งหรือจุดเริ่มต้น
และขนาดของข้อความที่จะแทนที่
(เป็นค่าตัวเลข)
ซึ่งรูปแบบชุดคำสั่งที่ใช้
มีดังนี้
รูปแบบชุดคำสั่ง
:
Mid
(MainStr As String, StartPosition As Long , Length As Long,
ReplaceStr As String)
|
โดยที่
MainStr มายถึง
ข้อความหลักขนาดไม่เกิน
65535
ตัวอักษร
StartPostion หมายถึง จุดเริ่มต้นของข้อความที่จะเปลี่ยนเนื้อหา
Length หมายถึง จำนวนตัวอักษรที่จะถูกแทนที่
หรือความยาวของข้อความที่จะถูกนำไปแทนที่ข้อความชุดเดิม
(หมายถึงความยาวของ
ReplaceStr)
ReplaceStr หมายถึง ข้อความชุดใหม่ที่จะนำไปแทนที่
ตัวอย่างที่
6-03
: การแทนที่ข้อความด้วยคำสั่ง
Mid()
SUB
subExample06_03
Dim sTestStr
As String
Dim sDisplay
As String
sTestStr =
"หลงแต่ความรู้สูงจึงจูงโลกสู่บรรลัยกัน"
'ค้นหาแทนที่ด้วยคำสั่ง
Mid()
Mid(sTestStr,
29, 11, "ประลัยกัลป์")
'เตรียมข้อความแสดงผล
sDisplay =
"sTestStr = ""หลงแต่ความรู้สูงจึงจูงโลกสู่บรรลัยกัน"""
sDisplay =
sDisplay + Chr(13) + Chr(13) + _
"เมื่อผ่านการทำงานของคำสั่ง"
+ Chr(13) + _
"Mid(
sTestStr, 29, 11, ""ประลัยกัลป์""
)" + Chr(13) + _
"ข้อความในตัวแปร
sTestStr
จะกลายเป็น"
+ Chr(13) + _
Chr(13) +
sTestStr
MsgBox
sDisplay
END
SUB
|
![]() |
รูปที่
6-03
ผลการทำงานของซับรูทีน
subExample06_03
|
6.3.2.2
การสร้างชุดคำสั่งค้นหาและแทนที่ข้อความขึ้นใช้เอง
ในภาษา
OpenOffice
/ LibreOffice Basic จะไม่มีชุดคำสั่งที่ทำหน้าที่นำข้อความย่อย
ไปเปรียบเทียบค้นหาและแทนที่ในข้อความหลักโดยตรงให้ใช้
แต่เราสามารถสร้างขึ้นใช้เองได้
โดยอาศัยคำสั่ง InStr()
และคำสั่ง
Mid()
มาเป็นส่วนประกอบดังรายละเอียดในต้นฉบับโปรแกรมชุดที่
6-01
ต้นฉบับโปรแกรมชุดที่
6-01
: คำสั่งในการค้นหาและแทนที่ข้อความ
FUNCTION
SearchReplace(sSource As String, sSearch As String, sNewPart As
String)
Dim sResult
As String 'เก็บข้อความที่ถูกแทนที่แล้ว
Dim
lStartPos As Long 'ตำแหน่งเริ่มต้นค้นหาและแทนที่
Dim
lCurrentPos As Long 'ตำแหน่งตัวอักษรปัจจุบัน
sResult = ""
lStartPos =
1
lCurrentPos
= 1
If (sSearch
= "") Then 'ถ้าไม่มีข้อความที่จะค้นหาและแทนที่
sResult =
sSource 'ส่งข้อความหลักกลับ
Else
'ทำการค้นหาและแทนที่ข้อความย่อยที่พบทั้งหมด
Do While
(lCurrentPos <> 0)
'หาตำแหน่งเริ่มต้นของส่วนข้อความที่จะแทนที่
lCurrentPos
= InStr(lStartPos, sSource, sSearch)
If
(lCurrentPos <> 0) Then 'กรณีที่พบ
'นำข้อความก่อนจุดที่พบไปเก็บใน
sResult
sResult =
sResult + _
Mid(sSource,
lStartPos, (lCurrentPos - lStartPos) )
'นำข้อความที่จะแทนที่มาต่อท้าย
sResult
sResult =
sResult + sNewPart
'หาจุดเริ่มต้นที่จะค้นหาต่อไป
lStartPos
= lCurrentPos + Len(sSearch)
Else
'กรณีที่หาไม่พบอีกแล้วจะนำข้อความที่เหลือ
'ต่อท้าย
sResult
sResult =
sResult + _
Mid(sSource,
lStartPos, Len(sSource))
End If
Loop
End If
'ส่งข้อความใหม่ที่ได้ซึ่งเก็บใน
sResult
กลับ
SearchReplace
= sResult
END
FUNCTION
|
วิธีการทำงานของฟังก์ชัน
SearchReplace
ในข้างต้น
เป็นการค้นหาและแทนที่ข้อความที่ต้องการที่อยู่ในข้อความหลัก
(sSource)
โดยมีหลักการทำงานดังนี้
- ใช้คำสั่ง InStr() หาตำแหน่งเริ่มต้นของจุดที่จะแทนที่ข้อความ
- จากนั้นจะนำส่วนของข้อความที่อยู่ก่อนจุดที่จะแทนที่ ไปเก็บไว้ในตัวแปร sResult ด้วยคำสั่ง Mid() (แยกส่วนข้อความ)
- นำข้อความย่อยที่จะแทนที่ ที่เก็บในตัวแปร sNewPart มาต่อท้ายข้อความที่เก็บอยู่ใน sResult ที่ได้จากข้อ 2.
- จากนั้นจะทำการหาตำแหน่งเริ่มต้นใหม่ (lStartPos) ด้วยการนำตำแหน่งปัจจุบัน รวมกับขนาดของข้อความที่ใช้ค้น (sSearch)
- ดำเนินการตั้งแต่ข้อ 1. ซ้ำจนกว่าจะไม่พบส่วนข้อความที่ตรงกับข้อความที่เก็บ sSearch อีก
- กรณีที่ไม่พบส่วนข้อความที่ตรงกับ sSearch จะนำข้อความที่ระบุใน sSource ตั้งแต่ตำแหน่งที่ระบุในตัวแปร sStartPos ไปจนจบข้อความมาต่อท้ายข้อความที่เก็บใน sResult ด้วยคำสั่ง Mid() เช่นเดียวกัน
หมายเหตุ |
ข้อความที่ใช้กับฟังก์ชัน
SearchReplace
จะต้องมีขนาดไม่เกิน
65535
ตัวอักษร
|
ในตัวอย่างที่
6-04
เป็นตัวอย่างของการนำฟังก์ชัน
SearchReplace
ที่สร้างขึ้นในข้างต้นมาใช้งาน
ตัวอย่างที่
6-04
: การค้นหาและแทนที่ข้อความด้วยฟังก์ชัน
SearchReplace
SUB
subExample06_04
Dim sTestStr
As String
Dim sDisplay
As String
sTestStr =
"หลงแต่ความรู้สูงจึงจูงโลกสู่บรรลัยกัน"
+ _
Chr(13) +
"เพราะไม่สร้างคุณธรรมให้ตน"
'ค้นหาแทนที่ด้วยคำสั่ง
SearchReplace
sTestStr =
SearchReplace( sTestStr, "บรรลัยกัน",
"ประลัยกัลป์")
'เตรียมข้อความแสดงผล
sDisplay =
"sTestStr = ""หลงแต่ความรู้สูงจึงจูงโลกสู่บรรลัยกัน"""
+ _
Chr(13) +
" ""เพราะไม่สร้างคุณธรรมให้ตน"""
sDisplay =
sDisplay + Chr(13) + Chr(13) + _
"เมื่อผ่านการทำงานของคำสั่ง"
+ Chr(13) + _
"sTestStr
= SearchReplace( sTestStr, " +_
"""บรรลัยกัน"",
""ประลัยกัลป์"")"
+ _
Chr(13) +
"ข้อความในตัวแปร
sTestStr
จะกลายเป็น"
+ _
Chr(13) +
Chr(13) + sTestStr
MsgBox
sDisplay
END
SUB
|
![]() |
รูปที่
6-04
ผลการทำงานของซับรูทีน
subExample06_04
|
บันทึกประจำวันที่
29
มิถุนายน
พ.ศ.
2557 (2014)
เวลา
|
เหตุการณ์
|
|||
06:00 น. | ตื่นนอน ออกแบบหน้าร้านค้าสำหรับเปิดบนเครือข่ายอินเตอร์เน็ต | |||
06:45 น. |
งานของกิจกรรมอาชีพ
กสิกรรมธรรมชาติ บ้านแม่ทำ
สีทา (3/2557)
: ตัดหญ้าเตรียมพื้นที่ปลูกข้าวโพดข้าวเหนียว
|
|||
09:15 น. |
|
|||
09:45 น. | งานของกิจกรรมอาชีพ งานอินเตอร์เน็ต (18/2557):ทำต้นฉบับบทความเรื่องใหม่ เชื่อมต่ออินเตอร์เน็ต ปรับแต่ง Affiliate Program และโพสต์บทความเรื่องใหม่ | |||
12:45 น. |
|
|||
13:45 น. | ปรับแต่งปั้มชัก และสูบน้ำใช้ด้วยพลังงานจากแผงโซลาร์เซลล์ | |||
15:00 น. | งานของกิจกรรมอาชีพ งานการตลาดและการลงทุน (20/2557):ไปจัดกลุ่มเสนอสินค้า Yic nano ที่บ้านประดูเหลี่ยม, แวะเติมน้ำมันที่ปั้มหยอดเหรียญหน้าโรงเรียนนิคม 2, เติมเงินโทรศัพท์ที่หน้านิคม, ไปถึงหมู่บ้านประดู่เหลี่ยม, สำรวจหมู่บ้าน, จัดกลุ่มนำเสนอสินค้าที่บ้านพี่ประไพ, เสร็จงานเดินทางกลับ | |||
20:15 น. |
|
|||
21:00 น. | เข้านอน |