asp搜索关键字前后显示问题
一、问题需求分析:
(1)从一大段文本中提取一段文本,该段文本必须满足下列要求:
A. 包含关键词“资金损失”;
B. 若关键词前的字符数超过 50 个,则截取靠近关键词的前 50 个字符;
C. 若关键词前的字符数不超过 50 个,则提取关键词前的所有字符;
D. 若关键词后的字符数超过 30 个,则截取靠近关键词的后 30 个字符;
E. 若关键词后的字符数不超过 30 个,则提取关键词后的所有字符。
(2)将提取到的文本高亮显示。
二、解决问题的思路:
从一个字符串中提取另一个字符串,可以使用函数 Mid , 该函数的语法是:Mid(string, start, [,length]),参数 string 为要从中搜索的字符串,参数 start 为要提取的字符串在 string 中的位置(从左往右数),可选参数 length 为要提取多少个字符串。
将 Mid 函数应用到本问题中来分析:
string 为已知字符串(即那一大段文本);
start 的值可通过下面的方法计算得出:
A. 先用 Instr 函数返回关键词在整段内容中的位置 x ,若 x 大于 0 即为找到了关键词,x - 1 即关键词左边的字符数;
B. 若 x 大于 50 ,则 start 的值就是 x - 50;
C. 若 x 等于或小于 50 ,则 start 的值就是 1 (即从头开始提取)。
length 的值可通过下面的方法计算得出:
A. 先计算出关键词左边提取的字符串长度 y :若前述 x 大于 50 ,则 y = 50 ;若 x 等于或小于 50 则 y = x - 1;
B. length = y + 关键词的长度 + 30 ,不用担心 length 超出字符串范围,因为函数 Mid 在 length 超出字符串范围时,会一直提取到字符串末尾。
三、示例代码:
<%
Dim Str_1, Str_2, KeyWord, Len_1, Len_2, Len_3, Pos_1, Pos_2
Str_1 = "……发现问题故意隐瞒不报,袒护责任人,造成资金损失的,要按规定给予行政处分……" '原始字符串
KeyWord = "资金损失" '关键词
Len_1 = 50 '要提取的关键词前字符数
Len_2 = 30 '要提取的关键词后字符数
Pos_1 = Instr(Str_1, KeyWord) '关键词的位置
If Pos_1 > 50 Then '若关键词前字符数大于 50 个
Pos_2 = Pos_1 - 50 '提取的起始位置
Len_3 = 50 + Len(KeyWord) + 30 '提取的长度
ElseIf Pos_1>0 And Pos_1<=50 Then '若关键词前字符数在 1~50
Pos_2 = 1
Len_3 = (Pos_1 - 1) + Len(KeyWord) + 30
End If
Str_2 = Mid(Str_1, Pos_2, Len_3)
Str_2 = "<span style=""background-color:#EE3300"">" & Str_2 & "</span>" '高亮显示代码
%>
注:以上代码只考虑关键词在整段内容中第一次出现
可以用,非常感谢!如果显示关键字所在段落代码如何写?
“显示关键词所在段落”这个问题要看“原始文本”是如何划分段落和如何保存的。基本思路是:以段落标记为分界点,用 split 函数将“原始文本”转换为数组(每个段落成为 1 个数组元素),然后用循环检测段落中是否有关键词,有则将整段取出就可以了。代码比上面的还要简单。因时间关系,不能给你一一测试了。你可以自己先按这个思路试试,若真不能解决,再请给出你“原始文本”的段落划分方法和保存方法,有空再帮你看。