Jag har problem med att hitta nogonting som kan hjälpa mig. JAg vet inte om jag har missförstått scriptet, men jag får problem (jag antar att det är skrivet för att sortera tal, inte text) Jag hittade ett annat script, som jag trodde mera på men.. Varför inte använda bubblesort..? Sortera en array
Jag har en textfil(asp) som innehåller en lista på ord.
t ex
fan
djävlar
skit
osv
jag läser in detta med FSO
<code>
Const Filename = "../Styles/arraytest.asp" ' file to read
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim FSO
set FSO = server.createObject("Scripting.FileSystemObject")
Dim Filepath
Filepath = Server.MapPath(Filename)
if FSO.FileExists(Filepath) Then
Set TextStream = FSO.OpenTextFile(Filepath, ForReading, False, _
TristateUseDefault)
Dim Contents
Contents = TextStream.ReadAll
Response.write "<textarea name=""med"" cols=""50"" rows=""10"" Wrap=""Physical"">" & Contents & "</textarea><hr>"
TextStream.Close
Set TextStream = nothing
end if
Set FSO = nothing
</code>
Nu är det så, att innan detta läggs in i textarean, så skulle jag vilja ha orden sorterade.
Jag får ju en array med badChars = Split(Contents, vbCrLf) men hur skall jag kunna sortera efter alfabetet?Sv: Sortera en array
Här är det första felet
<code>
Sub PrintArray(vec,lo,hi)
'== Simply print out an array from the lo bound to the hi bound.
Dim i
For i = lo to hi
Response.Write vec(i) & "<BR>"
Next
End Sub
</code>
Nästa:
<code>
'== Three or more items to sort
pivot = vec(int((loBound + hiBound) / 2))
vec(int((loBound + hiBound) / 2)) = vec(loBound)
vec(loBound) = pivot
loSwap = loBound + 1
hiSwap = hiBound
</code>
Det här verkar svårare än vad jag trodde...Sv: Sortera en array
<code>
function arraysort(values())
Dim i
Dim j
Dim smallest_value
Dim smallest_j
dim min,max
dim m
dim temp
'on error resume next
min = lbound(values,2)
max = ubound(values,2)
For i = min To max
smallest_value = values(0,i)
smallest_j = i
For j = i + 1 To max
' See if values(j) is smaller. changed to strComp to work with strings.
'If strComp(values(0,j),smallest_value,vbTextCompare) = -1 Then
If cdbl(values(0,j)) < cdbl(smallest_value) and Len(values(0,j))<> 0 Then
' Save the new smallest value.
smallest_value = values(0,j)
smallest_j = j
End If
Next 'j
If smallest_j <> i Then
' Swap items i and smallest_j.
for intA = 0 to ubound(values,1)
temp = values(intA,smallest_j)
values(intA,smallest_j) = values(intA,i)
values(intA,i) = temp
next 'intA
End If
Next 'i
arraysort = values
End function
</code>
Jag för felmedelande, och den pekar på
min = lbound(values,2)
max = ubound(values,2)
Även detta script tycks vara skrivet för tal inte text.
Går det att ändra detta scriptet?Sv: Sortera en array
Långsam men enkel:
<code>
Function Sort(arr)
If isArray(arr) Then
Dim i, j
For i = 0 to uBound(arr) - 1
For j = 0 to uBound(arr) - 1 - i
If strComp(arr(j),arr(j+1)) > 0 Then
tmp = arr(j)
arr(j) = arr(j+1)
arr(j+1) = tmp
End If
Next
Next
Else
' Error: No array
End If
Sort = arr
End Function
</code>