 |
|
KINH NGHIỆM LẬP
TRÌNH |
|
Dùng hàm instr
trong ASP để hỗ trợ việc tìm kiếm
NGUYỄN TRẦN HUY PHONG (Lâm Đồng) |
|
Tôi xin trình bày một kinh nghiệm sử dụng hàm
instr có sẵn trong ASP để hỗ trợ việc tìm kiếm.
Bạn hãy xem xét hàm tim_kiem ở đoạn mã 1. Hàm
Instr(số_bắt_đầu_tìm,
nội_dung,chuỗi_tìm,tùy_chọn) sẽ trả về số thứ tự
tìm thấy chuỗi_tìm trong nội_dung. Do
đó, trong hàm tim_kiem, đầu tiên ta tách các
từ cần tìm vào một mảng tên là keywords. Biến
kq_1 cho kết quả tìm nguyên chuỗi trong nội
dung. Nếu xuất hiện chuỗi cần tìm trong nội dung,
kq_1 sẽ lớn hơn 1. Như vậy, với điều kiện “tìm
chính xác cụm từ”, ta chỉ đơn giản dùng ngay kq_1. |
|
Với điều kiện “tìm ít nhất một từ”, khi kết thúc
vòng lặp ta thấy kq_2 được tăng lên bằng với
số từ được tìm thấy. Do đó chỉ cần kq_2 lớn
hơn 1, kết quả tìm kiếm sẽ là đúng. |
|
Với điều kiện “tìm tất cả các từ” thì kq_2 ít
nhất phải bằng số từ cần tìm, do đó với điều kiện
kq_2>=keycnt+1 thì cho kết quả đúng. |
|
Việc chuyển giao một phần công việc tìm kiếm cho ASP
xử lý theo cách như trên (chuyển bớt "gánh nặng" từ
tầng cơ sở dữ liệu lên tầng ứng dụng) có thể sẽ giúp
cơ sở dữ liệu chạy nhanh hơn và kết quả tìm kiếm sẽ
tốt hơn. |
|
Đoạn mã 1
function tim_kiem(noi_dung, chuoi_tim,dieu_kien)
dim keywords,keycnt,kq_1,kq_2,kq,kq_tam
rem đầu tiên đưa các từ cần tìm vào 1 mảng
keywords = split(chuoi_tim," ")
rem đếm số từ cần tìm
keycnt = ubound(keywords)
rem gán các giá trị mặc định cho các biến
kq_1=0
kq_2=0
kq=0
kq_1=instr(1,noi_dung,chuoi_tim,vbTextCompare)
kq_tam=0
For Each word in keywords
kq_2 = instr(1,noi_dung,word,vbTextCompare)
if kq_2>0 then kq_tam=kq_tam+1 end if
next
select case dieu_kien
rem nếu điều kiện là “tìm chính xác cụm từ”
rem thì kết quả chính là kq_1
case "phrase":kq=kq_1
rem nếu điều kiện là “tìm tất cả từ” thì
rem kết quả tạm lớn hơn số từ +1 là đúng
case "and":if kq_tam>=keycnt+1 then kq=1 else kq=0
end if
rem nếu điều kiện là “tìm ít nhất một từ” thì
rem kết quả tạm lớn hơn 1 là đúng
case "or":if kq_tam>=1 then kq=1 else kq=0 end if
end select
tim_kiem=kq
end function |
|
|
|
 |
|
 |