2013-09-01 61 views
1

在舊的IIS機器上使用以下代碼爲我爲android和ios設備構建的移動應用程序生成XML ...它可以工作,但我現在想弄清楚如何按照日期排序修改,以便列表中有最新的文件在頂端...我的問題是,根據我如何我的代碼結構如下,是否可以使用傳統的asp對FSO中的項進行排序?

這是可能的與我現有的代碼(排序'x'以某種方式?

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<%Response.ContentType = "text/xml"%> 
<%Response.AddHeader "Content-Type","text/xml"%> 

<songlist> 
<% 
dim fs,fo,x 
dim i 
set fs=Server.CreateObject("Scripting.FileSystemObject") 

'point to a specific folder on the server to get files listing from... 
set fo=fs.GetFolder(Server.MapPath("./songs")) 
i = -1 


for each x in fo.files 
'loop through all the files found, use var 'i' as a counter for each... 
i = i + 1 
'only get files where the extension is 'mp3' -- we only want the mp3 files to show in list... 
if right(x,3) = "mp3" then 
%> 

<song> 
<songid><%=i%></songid> 
<name><%= replace(replace(x.Name, "-", " "), ".mp3", "")%></name> 
<filename><%=x.Name%></filename> 
<datemodified><%=x.DateLastModified%></datemodified> 
</song> 


<% 
end if 
next 

set fo=nothing 
set fs=nothing 
%> 
</songlist> 
+1

不是沒有引入新技術--FileSystemObject.Files屬性不支持任何排序語義。 儘管如此,你應該能夠在半小時內得到與ASP.Net WebAPI相當的工作。我強烈建議避免將東西封送到腳本對象數組中,然後對它們進行排序,然後在經典ASP中以這種方式發送XML(儘管您可以這樣做)。 如果你必須堅持傳統的ASP ....嘗試切換到JScript。 –

+0

@Tetsujin no Oni - 是的,我認爲在發佈問題後進行更多研究之後,FSO會受到限制...我在移動應用程序本身中創建一個數組,然後在UI中呈現,所以我會嘗試排序相反。 – tamak

+0

如何將其作爲答案發布? – Vogel612

回答

5

您可以使用稱爲「記錄集排序」的舊時間技巧輕鬆地在VBScript中對任何內容進行排序。下面的代碼是完全的工作和想法是從好老asp101現場拍攝,RIP(archive link

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% Option Explicit %> 
<%Response.ContentType = "text/xml"%> 
<%Response.AddHeader "Content-Type","text/xml"%> 
<songlist> 
<% 
Const adVarChar = 200 
Const adInteger = 3 
Const adDate = 7 

Dim objFSO, oFolder, oFile 
Dim fileCounter, objRS 
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 

'point to a specific folder on the server to get files listing from... 
Set oFolder = objFSO.GetFolder(Server.MapPath(".")) 
Set objFSO = Nothing 

'create a disconnected recordset 
Set objRS = Server.CreateObject("ADODB.Recordset") 

'append proper fields 
objRS.Fields.Append "Name", adVarChar, 255 
objRS.Fields.Append "DateLastModified", adDate 
objRS.Open 

'loop through all the files found, add to the recordset 
For Each oFile in oFolder.Files 
    objRS.AddNew 
    objRS.Fields("Name").Value = oFile.Name 
    objRS.Fields("DateLastModified").Value = oFile.DateLastModified 
Next 
Set oFolder=nothing 

'sort and apply: 
objRS.Sort = "DateLastModified DESC" 
objRS.MoveFirst 

fileCounter = 0 
'loop through all the records: 
Do Until objRS.EOF %> 
<song> 
<songid><%=fileCounter%></songid> 
<filename><%=objRS("Name")%></filename> 
<datemodified><%=objRS("DateLastModified")%></datemodified> 
</song><% 
    fileCounter = fileCounter + 1 
    objRS.MoveNext() 
Loop 
objRS.Close 
Set objRS = Nothing 
%> 
</songlist> 

(本地測試時,我刪除了一些位,當然你也可以將其添加回)

值得一提Recordset排序非常高效,幾年前我做了定製基準測試時,即使有數千個項目,它也能夠快速運行。

+0

哇,這很酷......謝謝。我幾年前在老ASP101網站上生活和呼吸過,RIP確實是老朋友。感謝您的幫助,我很感激。 – tamak

+0

乾杯@tamak和我也在那裏長大了超過30,000個職位,直到他們賣掉了這個地方。猜猜一切即將結束,無論好壞! :) –

1

不是沒有引入用於排序的替代技術--FileSystemObject.Files屬性不支持任何排序語義。儘管如此,JScript解決方案似乎可以非常輕鬆地進行插入排序。

相關問題