排序|拼音这个东西还是老早老早和幻想曲老兄讨论过的
当时弄了一个例子,搞完了随手也就扔了-_-!
前些天蓝色经典论坛那一位朋友问起来,又突然想到了,不过我看到PM的时候,他已经自己搞定了
汗,怕遗忘,加来算篇日志:)
我当时的思路是:
1,目前暂以歌手的拼音首字母排序
2,数据库中输入的歌手名称,直接汉字(除了外国佬:),不带任何的首字母前缀
3,解决办法,用一函数(现成的),功能嘛就是提取一段字符串的首字母
[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(" ") 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")%> L开头的<hr> <%=show("L")%> 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 %> |