这个东西还是老早老早和幻想曲老兄讨论过的
当时弄了一个例子,搞完了随手也就扔了-_-!
前些天蓝色经典论坛那一位朋友问起来,又突然想到了,不过我看到PM的时候,他已经自己搞定了
汗,怕遗忘,加来算篇日志:)
我当时的思路是:
1,目前暂以歌手的拼音首字母排序
2,数据库中输入的歌手名称,直接汉字(除了外国佬:),不带任何的首字母前缀
3,解决办法,用一函数(现成的),功能嘛就是提取一段字符串的首字母
<script language=vbs>
function getpychar(char)
tmp=65536+asc(char)
if(tmp>=45217 and tmp<=45252) then
getpychar= "A"
elseif(tmp>=45253 and tmp<=45760) then
getpychar= "B"
elseif(tmp>=45761 and tmp<=46317) then
getpychar= "C"
elseif(tmp>=46318 and tmp<=46825) then
getpychar= "D"
elseif(tmp>=46826 and tmp<=47009) then
getpychar= "E"
elseif(tmp>=47010 and tmp<=47296) then
getpychar= "F"
elseif(tmp>=47297 and tmp<=47613) then
getpychar= "G"
elseif(tmp>=47614 and tmp<=48118) then
getpychar= "H"
elseif(tmp>=48119 and tmp<=49061) then
getpychar= "J"
elseif(tmp>=49062 and tmp<=49323) then
getpychar= "K"
elseif(tmp>=49324 and tmp<=49895) then
getpychar= "L"
elseif(tmp>=49896 and tmp<=50370) then
getpychar= "M"
elseif(tmp>=50371 and tmp<=50613) then
getpychar= "N"
elseif(tmp>=50614 and tmp<=50621) then
getpychar= "O"
elseif(tmp>=50622 and tmp<=50905) then
getpychar= "P"
elseif(tmp>=50906 and tmp<=51386) then
getpychar= "Q"
elseif(tmp>=51387 and tmp<=51445) then
getpychar= "R"
elseif(tmp>=51446 and tmp<=52217) then
getpychar= "S"
elseif(tmp>=52218 and tmp<=52697) then
getpychar= "T"
elseif(tmp>=52698 and tmp<=52979) then
getpychar= "W"
elseif(tmp>=52980 and tmp<=53640) then
getpychar= "X"
elseif(tmp>=53689 and tmp<=54480) then
getpychar= "Y"
elseif(tmp>=54481 and tmp<=62289) then
getpychar= "Z"
else '如果不是中文,则不处理
getpychar=char
end if
end function
function getpy(str)
for i=1 to len(str)
getpy=getpy&getpychar(mid(str,i,1))
next
end function
alert("布鲁斯狼 的拼音首字母是:"&getpychar("布鲁斯狼"))
</script>
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
4,接着一个提取判断:如果需要首字母为L的,则提取出数据库中的歌手名,进行转换函数的附加,与约定的需要的字母L判断
我弄了个懒方法。
Function show(wchar)
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from mper"
rs.Open sql,conn,1,1
if rs.EOF and rs.BOF then
response.write ("暂时还没有记录")
else
Do Until rs.EOF
if getpychar(rs("m_name"))=wchar then
response.write("歌手:"& rs("m_name"))
end if
rs.MoveNext
Loop
end if
end function
这个自定义函数,就是显示数据库中 某歌手拼音首字母 是 变量wchar对应的值(比如A,B,C,D……)show("L")就是首字母是L的:)
就这样,功能很快实现了,不过没有再优化,细化下去-_-!
我的操作步骤:
1,建立数据库cnvm.mdb
建立表 mper
建立字段 m_id:自动编号,主键
建立字段 m_name:文本,歌手名
建立字段 m_zj:文本,歌手专集或歌曲名
2,数据库连接文件conn.asp
<%
db_path = "cnvm.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
%>
3,库文件lib.asp,主要功能见上描述
<!--#include file="conn.asp" -->
<%
function getpychar(char)
tmp=65536+asc(char)
if(tmp>=45217 and tmp<=45252) then
getpychar= "A"
elseif(tmp>=45253 and tmp<=45760) then
getpychar= "B"
elseif(tmp>=45761 and tmp<=46317) then
getpychar= "C"
elseif(tmp>=46318 and tmp<=46825) then
getpychar= "D"
elseif(tmp>=46826 and tmp<=47009) then
getpychar= "E"
elseif(tmp>=47010 and tmp<=47296) then
getpychar= "F"
elseif(tmp>=47297 and tmp<=47613) then
getpychar= "G"
elseif(tmp>=47614 and tmp<=48118) then
getpychar= "H"
elseif(tmp>=48119 and tmp<=49061) then
getpychar= "J"
elseif(tmp>=49062 and tmp<=49323) then
getpychar= "K"
elseif(tmp>=49324 and tmp<=49895) then
getpychar= "L"
elseif(tmp>=49896 and tmp<=50370) then
getpychar= "M"
elseif(tmp>=50371 and tmp<=50613) then
getpychar= "N"
elseif(tmp>=50614 and tmp<=50621) then
getpychar= "O"
elseif(tmp>=50622 and tmp<=50905) then
getpychar= "P"
elseif(tmp>=50906 and tmp<=51386) then
getpychar= "Q"
elseif(tmp>=51387 and tmp<=51445) then
getpychar= "R"
elseif(tmp>=51446 and tmp<=52217) then
getpychar= "S"
elseif(tmp>=52218 and tmp<=52697) then
getpychar= "T"
elseif(tmp>=52698 and tmp<=52979) then
getpychar= "W"
elseif(tmp>=52980 and tmp<=53640) then
getpychar= "X"
elseif(tmp>=53689 and tmp<=54480) then
getpychar= "Y"
elseif(tmp>=54481 and tmp<=62289) then
getpychar= "Z"
else '如果不是中文,则不处理
getpychar=char
end if
end function
function getpy(str)
for i=1 to len(str)
getpy=getpy&getpychar(mid(str,i,1))
next
end function
Function show(wchar)
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from mper"
rs.Open sql,conn,1,1
if rs.EOF and rs.BOF then
response.write ("暂时还没有记录")
else
Do Until rs.EOF
if getpychar(rs("m_name"))=wchar then
response.write("歌手:"& rs("m_name"))
response.write(" 歌名:"& rs("m_zj"))
response.write("<br>")
end if
rs.MoveNext
Loop
end if
rs.close
Set rs = Nothing
end function
%>
4,页面显示index.asp,没有多考虑,用了几个特例进行调试
<!--#include file="lib.asp" -->
<%
mchr=request.querystring("mchr")
if mchr="" then
%>
D开头的<hr>
<%=show("D")%><br>
L开头的<hr>
<%=show("L")%><br>
Z开头的<hr>
<%=show("Z")%>
<%else%>
<%=mchr%>开头的<hr>
<%=show(mchr)%>
<%end if%>
<%
for i = 65 to 90
response.write("<a href=index.asp?mchr="&chr(i)&">"&chr(i)&"</a> ")
next
%>