Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

@Nepumuk - mehrdimensionale ArraySortierung in ASP

@Nepumuk - mehrdimensionale ArraySortierung in ASP
11.01.2009 14:10:00
Martin
Hallo Nepumuk,
ich bin bereits seit 2001 Mitglied und regelmäßiger Besucher hier im Forum. Allerdings stelle ich heute ausnahmsweise einmal eine "Nicht-Excel"-Frage. Ich beschäftige mich neben Excel VBA auch mit ASP (Active Server Pages), die ebenfalls auf Visual Basic basieren. Auch mit ASP möchte ich gerne ein mehrdimensionales Array mit mehreren Sortkeys sortieren. Ich verwende zwar bereits den QuickSort-Algorithmus und konnte mir auch eine auf-/absteigende Sortierung einbauen, aber leider nur mit einem Sortierschlüssel.
Der Aufruf erfolgt mit :
QuickSort([zu sortierendes Array],[oberster Eintrag erste Dimension],[letzter Eintrag erste Dimension],[zu sortierende Spalte], [Sortierrichtung (>0 aufsteigend, Call QuickSort(MeinArray, 0, UBound(MeinArray,1) - 1, 5, -1)
Hier meine ASP-Array-Sortierung:
'Quicksort

Sub QuickSort (ByRef arrvar, ByVal intl, ByVal intr, ByVal intsortcolumn, ByVal cending)
Dim inti, intj, intpivot, intinnercounter ', vartemp
Dim arrhelp
ReDim arrhelp(UBound(arrvar,2)) 'für jede Spalte 1 Zelle
inti = intl 'erste Zeile
intj = intr 'alle Zeilen
intpivot = arrvar((intl + intr)\2, intsortcolumn)
Do
If cending  intpivot
inti = inti + 1
Loop
Do While intpivot > arrvar(intj, intsortcolumn)
intj = intj - 1
Loop
Else
Do While arrvar(inti, intsortcolumn) " & vbCrLf)
For intinnercounter = 0 to UBound(arrhelp)
arrhelp(intinnercounter) = arrvar(intj, intinnercounter)
arrvar(intj,intinnercounter) = arrvar(inti,intinnercounter)
arrvar(inti,intinnercounter) = arrhelp(intinnercounter)
Next
inti = inti + 1
intj = intj - 1
End If
Loop While inti 


Mir ist durchaus bewusst, dass diese Frage im falschen Forum steht. Da ich im Web aber keine Lösung gefunden habe und Dir aufgrund der Ähnlichkeit von ASP und MS VBA eine Übersetzung Deiner tollen Excel-Array-Sortierung nach ASP zutraue, wende ich mich mit meinem Problem an Dich.
Viele Grüße
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: @Nepumuk - mehrdimensionale ArraySortierung in ASP
11.01.2009 15:12:00
ChristianM
Hallo Martin,
ohne jetzt in deine Quicksort Routine weiter eingestiegen zu sein... vielleicht hilft dir ja folgender Code von Nepumuk weiter.
http://www.online-excel.de/excel/singsel_vba.php?f=97
Gruß
Christian
AW: @Nepumuk - mehrdimensionale ArraySortierung in ASP
11.01.2009 16:42:00
Martin
Hallo Christian,
vielen Dank für den Link. Genau mit diesem Code (allerdings leicht für ASP abgehändert) habe ich es bereits probiert und leider nur Fehlermeldungen erhalten. Ich komme leider nicht weiter...
Viele Grüße
Martin
AW: mehrdimensionale ArraySortierung in ASP
11.01.2009 18:39:29
Erich
Hallo Martin,
vielleicht helfen die Fehlermeldungen weiter.
Bekommst du in ASP einen Compile- oder einen Laufzeitfehler? Mit welcher Fehlermeldung?
Noch eine Frage: Wo und wie hast du den Code abgeändert?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mehrdimensionale ArraySortierung in ASP
11.01.2009 19:18:59
Martin
Hallo Erich,
Ich habe Dir meinen auf ASP angepassten Code unten eingefügt. Ich habe schon vieles probiert, im Augenblick kommt die Meldung
"Fehlertyp:
Laufzeitfehler in Microsoft VBScript (0x800A0009)
Index außerhalb des gültigen Bereichs: '[number: 1]'
/flugbuch/QuickSort/hauptflugbuchSuche.asp, line 344"
Zeile 344 ist bei mir gleich am Anfang " lngRowsArray(0, 1) = UBound(vntArray)"
Vielen Dank, dass Du es Dir mal ansiehst!
Viele Grüße
Martin
Dim vntSortArray (0)
vntSortArray(0) = Array(2)
Call prcSort(MeinArray, vntSortArray)

Sub prcSort(ByRef vntSortArray, ByRef vntArray)
Dim intIndex
Dim lngIndex1, lngIndex2, lngRowsArray()
Dim lngRowsCount, lngRangeCount
Dim vntTemp
ReDim lngRowsArray(1, (UBound(vntArray)) * 2)
'Array für den 1. Sortierlauf
lngRowsArray(0, 0) = LBound(vntArray)
lngRowsArray(0, 1) = UBound(vntArray)
lngRowsCount = 1
For intIndex = LBound(vntSortArray) To UBound(vntSortArray)
'Wenn eine Spalte angegeben
If vntSortArray(intIndex)  0 Then
lngRangeCount = -1
'Schleife zum sortieren der einzelnen Bereiche
For lngIndex1 = 0 To lngRowsCount Step 2
'Sortieren des Bereichs, wenn Zeilenzahl größer 1
If lngRowsArray(0, lngIndex1)  lngRowsArray(0, lngIndex1 + 1) Then
Call prcQuickSort(CLng(lngRowsArray(0, lngIndex1)), _
CLng(lngRowsArray(0, lngIndex1 + 1)), CInt(Abs(vntSortArray(intIndex))), _
_
CBool(vntSortArray(intIndex) > 0), vntArray())
'sortierten Bereich merken
lngRangeCount = lngRangeCount + 2
lngRowsArray(1, lngRangeCount - 1) = lngRowsArray(0, lngIndex1)
lngRowsArray(1, lngRangeCount) = lngRowsArray(0, lngIndex1 + 1)
End If
Next
lngRowsCount = -1
'Durchsuchen der soeben sortierten Spalte nach Wertewechsel
For lngIndex1 = 0 To lngRangeCount Step 2
'1. Zeile des zu sortierenden Bereichs
vntTemp = vntArray(lngRowsArray(1, lngIndex1), Abs(vntSortArray(intIndex)))
lngRowsCount = lngRowsCount + 1
lngRowsArray(0, lngRowsCount) = lngRowsArray(1, lngIndex1)
'Suche nach Wechsel innerhalb des Bereichs
For lngIndex2 = lngRowsArray(1, lngIndex1) To lngRowsArray(1, lngIndex1 + 1)
If vntTemp  vntArray(lngIndex2, Abs(vntSortArray(intIndex))) Then
lngRowsCount = lngRowsCount + 2
lngRowsArray(0, lngRowsCount - 1) = lngIndex2 - 1
lngRowsArray(0, lngRowsCount) = lngIndex2
vntTemp = vntArray(lngIndex2, Abs(vntSortArray(intIndex)))
End If
Next
'letzte Zeile des zu sortierenden Bereichs
lngRowsCount = lngRowsCount + 1
lngRowsArray(0, lngRowsCount) = lngRowsArray(1, lngIndex1 + 1)
Next
End If
Next
End Sub



Sub prcQuickSort(ByVal lngLbound,ByVal lngUbound,ByVal intSortColumn,ByVal bntSortKey, ByRef  _
vntArray())
Dim intIndex
Dim lngIndex1, lngIndex2
Dim vntTemp(), vntBuffer()
lngIndex1 = lngLbound
lngIndex2 = lngUbound
vntBuffer = vntArray((lngLbound + lngUbound) \ 2, intSortColumn)
Do
If bntSortKey Then
Do While vntArray(lngIndex1, intSortColumn)  vntBuffer
lngIndex1 = lngIndex1 + 1
Loop
Do While vntBuffer > vntArray(lngIndex2, intSortColumn)
lngIndex2 = lngIndex2 - 1
Loop
End If
If lngIndex1  _
vntArray(lngIndex2, intSortColumn) Then
For intIndex = LBound(vntArray, 2) To UBound(vntArray, 2)
vntTemp = vntArray(lngIndex1, intIndex)
vntArray(lngIndex1, intIndex) = _
vntArray(lngIndex2, intIndex)
vntArray(lngIndex2, intIndex) = vntTemp
Next
End If
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
ElseIf lngIndex1 = lngIndex2 Then
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngLbound 


Anzeige
AW: mehrdimensionale ArraySortierung in ASP
11.01.2009 19:37:54
Erich
Hi Martin,
das könnte mit der Untergrenze beim deklarieren zu tun haben.
in VBA ist "Option Base 0" überflüssig, weil Standard.
Könnte es sein, dass bei dir mit
ReDim lngRowsArray(1, (UBound(vntArray)) * 2)
nicht
ReDim lngRowsArray(0 To 1, 0 To (UBound(vntArray)) * 2)
sondern nur
ReDim lngRowsArray(1 To 1, 1 To (UBound(vntArray)) * 2)
angelegt wird?
Probier doch mal aus, wo bei diesen Belegungen der erste Fehler auftritt:
lngRowsArray(1, 1) = 1
lngRowsArray(0, 1) = 2
lngRowsArray(1, 0) = 3
lngRowsArray(0, 0) = 4
Du könntest dir auch LBound(lngRowsArray) per MsgBox o.ä. ausgeben lassen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mehrdimensionale ArraySortierung in ASP
11.01.2009 19:59:24
Martin
Hallo Erich,
leider kann ich keine MsgBox erzeugen. Normal kann ich mit mir Informationen im erzeugten HTML-Code ausgeben lassen, aber leider geht das nicht, wenn irgendein Fehler im ASP-Code ist. Der HTML-Code wird erst übermittelt, wenn das ganze Skript fehlerfrei durchgelaufen ist, sonst kommt die Fehlemeldung. Das Array wird auch in ASP immer mit ersten Eintrag = index 0 angelegt.
Viele Grüße
Martin
@Erich
11.01.2009 20:41:00
Martin
Hallo Erich,
hier schicke ich Dir mal die Seite im Web für welche ich die ArraySortierung benötige:
http://fsv-oppin.spriebel.de/hauptflugbuchSuche.asp
...allerdings ist hier nur die Sortierung nach einem Kriterium möglich (zum Sortieren auf die Spaltenüberschrift klicken). Die Daten befinden sich alle in CSV-Dateien (für jeden Flugbetriebstag eine) und werden entsprechend der Vorgaben gefiltert einem Array übergeben, welches nun sortiert werden soll.
Viele Grüße
Martin
Anzeige
AW: mehrdimensionale ArraySortierung in ASP
12.01.2009 09:11:35
Erich
Hi Martin,
da das Debuggen unter ASP eher beschwerlich ist:
Läuft der Code - soweit er übertragbar ist - in VBA?
Läuft der Code dann auch als VBScript?
Danach erst würde ich den Code unter ASP testen.
Noch eine Rückfrage:

Probier doch mal aus, wo bei diesen Belegungen der erste Fehler auftritt:
lngRowsArray(1, 1) = 1
lngRowsArray(0, 1) = 2

Was kam dabei heraus?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

136 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige