按歌手名拼音首字母進(jìn)行排序

2010-08-28 10:47:36來源:西部e網(wǎng)作者:

這個東西還是老早老早和幻想曲老兄討論過的

當(dāng)時弄了一個例子,搞完了隨手也就扔了-_-!

前些天藍(lán)色經(jīng)典論壇那一位朋友問起來,又突然想到了,不過我看到PM的時候,他已經(jīng)自己搞定了

汗,怕遺忘,加來算篇日志:)

我當(dāng)時的思路是:

1,目前暫以歌手的拼音首字母排序

2,數(shù)據(jù)庫中輸入的歌手名稱,直接漢字(除了外國佬:),不帶任何的首字母前綴

3,解決辦法,用一函數(shù)(現(xiàn)成的),功能嘛就是提取一段字符串的首字母
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]

4,接著一個提取判斷:如果需要首字母為L的,則提取出數(shù)據(jù)庫中的歌手名,進(jìn)行轉(zhuǎn)換函數(shù)的附加,與約定的需要的字母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



這個自定義函數(shù),就是顯示數(shù)據(jù)庫中 某歌手拼音首字母 是 變量wchar對應(yīng)的值(比如A,B,C,D……)show("L")就是首字母是L的:)

就這樣,功能很快實(shí)現(xiàn)了,不過沒有再優(yōu)化,細(xì)化下去-_-!

我的操作步驟:

1,建立數(shù)據(jù)庫cnvm.mdb

建立表 mper
建立字段 m_id:自動編號,主鍵
建立字段 m_name:文本,歌手名
建立字段 m_zj:文本,歌手專集或歌曲名

2,數(shù)據(jù)庫連接文件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,沒有多考慮,用了幾個特例進(jìn)行調(diào)試



<!--#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
%>



頁面調(diào)試地址:

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

SO,上面算是我的回憶。再看這位朋友是如何解決的:

http://www.5do8.com/news.asp?id=193
關(guān)鍵詞:asp

贊助商鏈接: