按歌手名拼音首字母进行排序

2010-08-28 10:47:36来源:西部e网作者:

这个东西还是老早老早和幻想曲老兄讨论过的

当时弄了一个例子,搞完了随手也就扔了-_-!

前些天蓝色经典论坛那一位朋友问起来,又突然想到了,不过我看到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("&nbsp;歌名:"& 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>&nbsp;")
next
%>



页面调试地址:

http://cnbruce.com/test/music/

SO,上面算是我的回忆。再看这位朋友是如何解决的:

http://www.5do8.com/news.asp?id=193
关键词:asp

赞助商链接: