Huy Phonghuyphong.com

Tìm kiếm với hàm instr trong ASP

Huy Phong
Đọc bài viết
Cỡ chữ

Trong lập trình ASP với cơ sở dữ liệu để tìm kiếm, ta đã quen với  việc dùng câu lệnh Like để tìm kiếm. Hôm nay tôi 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.

 

Xem xét hàm tim_kiem sau

 

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ừ” 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ì nếu 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ì nếu 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

 

Giải thích

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 tìm kiếm, đầu tiên ta tách các từ cần tìm vào một mảng tên là keywords. Sau đó kq_1 sẽ là tìm nguyên chuỗi trong nội dung, nếu xuất hiện chuỗi này trong nội dung, kq_1 sẽ lớn hơn 1. Do đó, 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ừ”, ta thấy kq_2 được tăng lên sau từng vòng lặp bằng với số từ tìm kiếm. Do đó chỉ cần kq_2 lớn hơn 1 thì 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.

 

Phạm vi ứng dụng

Với một số đặc thù công việc tìm kiếm, đôi khi ta cần tìm một lúc trên nhiều trường trong cơ sở dữ liệu, việc sử dụng mệnh đề hoặc (OR) và mệnh đề và (AND) kết hợp với câu lệnh Like trong cơ sở dữ liệu sẽ làm cho hệ thống chạy chậm và câu lệnh phức tạp. Việc đưa một phần công việc tìm kiếm cho ASP xử lý 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.

Xem thêm trong Kinh nghiệm lập trình

Bình luận

Tìm một bài viết