ดูเหมือนว่าจะเป็นสิ่งที่ควรทำอย่างยิ่ง แต่ไม่ใช่ - แน่นอนไม่ชัดเจนว่าจะทำอย่างไร
ฉันต้องการเขียนฟังก์ชันใน Lotus Symphony Basic ที่ใช้สตริงรูปแบบการค้นหา regexp และสตริงการแทนที่และส่งคืนสตริงตามที่ได้รับการแก้ไขโดยการค้นหาและแทนที่ regex เหมือนs/search/replace/g
อยู่ใน sed หรือ perl
หลังจากผ่านไปหลายชั่วโมงพยายามทำความเข้าใจกับเอกสารสุดซึ้งนี่คือสิ่งที่ฉันมี:
Function ReSub (T as String, S as String, R as String) As String
Dim result as String
' In other languages, this is trivially easy. perl has an s/// operator,
' and most other languages have a function call. e.g.
'
' perl: $result = ($T =~ s/$S/$R/g);
' python: result = re.sub(S,R,T)
search = CreateUnoService("com.sun.star.util.TextSearch")
opts = CreateUnoStruct("com.sun.star.util.SearchOptions")
opts.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP
opts.searchString = S
opts.replaceString = R
search.setOptions(opts)
found = search.searchForward(T, 0, Len(T))
' result = ??????????????
ReSub = result
End Function
การก้าวผ่านสิ่งนี้ใน IDE แสดงให้เห็นว่าสิ่งนี้ทำงานได้ดี แต่ฉันไม่รู้ว่าฉันจะได้รับผลการแก้ไขสตริงจากที่ไหน T
ไม่ได้ถูกแก้ไขได้โดยตรงและก็ไม่ได้อยู่ในส่วนใดของfound
, search
หรือopts
วัตถุอย่างใดอย่างหนึ่ง
ฉันสามารถเขียนวนรอบสักครู่search.SearchForware
และทำการทดแทนตัวเองโดยใช้Mid()
คำสั่ง - แต่แล้วฉันก็ถูก จำกัด ให้แทนที่ด้วยสตริงคงที่ (ไม่มีการอ้างอิงกลับหรือ&
เว้นแต่ว่าฉันจะใช้พวกเขาด้วยตัวเองในแบบพื้นฐาน)
ดังนั้น:
- การตั้งค่าทำอะไร
opts.replaceString
จริงๆ - ถ้าเป็นเช่นนั้น:
- มันทำอะไร?
- ฉันจะเรียกคืนผลลัพธ์ได้อย่างไร
หมายเหตุ: คำถามนี้เกี่ยวกับการเขียนโปรแกรมใน Libre Office Basic เพื่อส่งคืนสตริงที่เปลี่ยนแปลงและไม่มีอะไรเกี่ยวข้องกับการทำการค้นหาและแทนที่ในเซลล์ด้วยส่วนติดต่อผู้ใช้ Libre Office Calc
Mid()
เป็นคำสั่งเพื่อแทนที่มากกว่าMid()
เป็นฟังก์ชั่นการแยก มันใช้งานได้ แต่มันเงอะงะ - และดูเหมือนว่าไม่จำเป็นเพราะSearchOptions
โครงสร้างมีReplaceString
วัตถุจริงๆ ฉันไม่ได้รวมวงในคำถามของฉันเพราะฉันต้องการหลีกเลี่ยงการรับเคล็ดลับในการปรับปรุงเมื่อสิ่งที่ฉันต้องการคือข้อมูลเกี่ยวกับวิธีการใช้ประโยชน์จากreplaceString
เพื่อให้ฉันสามารถกำจัดมันได้อย่างสมบูรณ์