| |
Visual-Basic EinsteigerRe: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 01.05.24 08:48 |
| Ja genau das ises 👌
Daaanke 😀👍 | |
Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 25.04.24 21:47 |
| Hallo
ich wollte gern in mein Programm die 3 meist Aufgerufenen in Labels anzeigen.
eben Platz 1 Platz 2 und Platz 3
Das Problem ist die Listbox weil z.B. 120 vbTab Mario usw
ich hab schon einiges versucht aber es klappt nicht
For bn = 0 To ListBesten3.ListCount - 1
If LblBGTemp.Caption > ListBesten3.List(bn) Then ListBesten3.List(bn) = _
LblBGTemp.Caption & vbTab & LblInfo(0).Caption
Next Danke 😀 | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 26.04.24 11:27 |
| Hallo!
So weit ich das verstanden habe ....
Vor der Schleife sind drei Integer-Variable zu definieren (max_aufrufe, aufrufe, max_index).
In der Schleife wird mit der INSTR-Methode die Zahl im Eintrag (bn) ermittelt (vbTab-Position)
und in die Integer-Variable "aufrufe" konvertiert.
Diese Zahl wird jeweils mit "max_aufrufe" verglichen und ggf. dort eingetragen (falls größer).
Zusätzlich wird in dem Fall der zugehörige Index (bn) in "max_index" übernommen.
Nach dem Durchlaufen der Schleife wird der Listeneintrag "max_index" ins Label eingetragen.
Für die Ermittlung des zweitgrößten Eintrags wird ebenso verfahren,
allerdings wird in der Schleife der Eintrag bei "max_index" ignoriert (IF not bn = max_index then ...).
Vor dieser Schleife wird "max_index2" als Integer deklariert und wie oben zum Speichern
des Listen-Index verwendet.
Nach dem Durchlaufen der Schleife wird der Listeneintrag "max_index2" im Label angehängt.
usw.
Beitrag wurde zuletzt am 26.04.24 um 11:29:09 editiert. | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 27.04.24 00:40 |
| Also besser gesagt die 3 mit den meisten Punkten.
Listbox
15 Hans
59 Peter
35 Klaus
Sortiert
15 Hans
35 Klaus
59 Peter
nun wollte ich die 15 Hans mit dem näxten vergleichen (z.b) 55 Andree, nun wollte ich den Hans mit den 15 Punkten überschreiben
und die listbox wieder sortieren
35 Klaus
55 Andree
59 Peter
speichern und gut | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 27.04.24 14:23 |
| Hallo!
Überschreiben?
Ich verstehe nicht, wonach gefragt wird.
Du hast also die Einträge in einer Listbox ansteigend sortiert.
Wenn sich ein potentieller neuer Eintrag ergibt (Andree),
soll zunächst geprüft werden, ob dieser mögliche Eintrag einen höheren
Wert hat als der Eintrag mit dem niedrigsten Wert in der Liste
(direkter Vergleich der Punktwerte).
Nur falls dies der Fall ist, wird der Eintrag mit dem niedrigsten Wert
aus der Liste gelöscht (=erster Wert in der sortierten Liste),
der neue Eintrag hinzugefügt und die Liste danach wieder sortiert.
Anderenfalls bleibt die Liste unverändert. | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 27.04.24 16:08 |
| nein die liste lässt sich ja mit .sorted nicht nach zahlen sortieren. wie man listen mit zahlen sortiert weiss ich nur der Hacke an der Sache ist Zahl vbTab Name weil da hörts auf ich bekomm nur fehlermeldungen
Meine Idee wäre eben nach Zahlen sortieren inkl. Name und der kleinste wert wäre Index 0 oder Index 3 wie auch immer
Nun kann ich den kleinsten wert wenn er z.B. index 0 ist, damit verlgeichen und wenn der neue Wert grösser ist, den im Index 0 ersetzen und wieder sortieren
Was anderes fällt mich nicht ein wie das sonst gehen kann 😞
15 Hans
65 Klaus
155 Peter
nun kommt der Andree mit 72 somit ist 72 grösser als die 15 (logisch) und ich wollte den Andree nun mit Hans ersetzen.
und wieder neu sortieren ego...
65 Klaus
72 Andree
155 Peter
so wär das Ergebnis undgefähr | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Kuno60 | Datum: 27.04.24 17:10 |
| Die VB6-Listbox unterstützt nur Zeichenfolgen. Beim Sortieren werden die Einträge alphabetisch sortiert und nicht nach Zahlenwert.
Eine Möglichkeit wäre, alle Zahlen auf die gleiche Länge zu bringen, durch führende Nullen.
List1.AddItem ("013" & vbTab & "Otto")
List1.AddItem ("067" & vbTab & "Franz")
List1.AddItem ("004" & vbTab & "Gerd")
List1.AddItem ("035" & vbTab & "Peter")
List1.AddItem ("117" & vbTab & "Ina")
List1.AddItem ("094" & vbTab & "Hubert") Wenn Sorted = True ist, werden so die Einträge richtig sortiert.
004 Gerd
013 Otto
035 Peter
067 Franz
094 Hubert
117 Ina
Eine andere Möglichkeit wäre, die Zahlen in einen Zahlenwert umzuwandeln (z.B. Integer), diese dann sortieren und dann der ListBox in der richtigen Reihenfolge hinzufügen. | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 28.04.24 16:10 |
| Danke ich weiss das die Listboxen nur alpha und genau das ist mein problem
Dim v As Variant
Private Sub Form_Load()
'List1.AddItem 125 & vbTab & "Hank": List1.AddItem 15 & vbTab & "Danny":
' List1.AddItem 19 & vbTab & "Robby"
List1.AddItem 125: List1.AddItem 15: List1.AddItem 19
End Sub
Private Sub Label1_Click()
Dim Liste() As Long 'bei kommazahlen long durch double ersetzen...
Dim i As Integer
ReDim Liste(List1.ListCount)
For i = 0 To List1.ListCount - 1
v = Split(List1.List(i))
Liste(i + 1) = CLng(List1.List(i)) 'dann auch das clng durch ein cdbl ersetzen
Next
Quicksort 1, UBound(Liste), Liste
List1.Clear
For i = 1 To UBound(Liste)
List1.AddItem Liste(i)
Next
End Sub
Private Sub Quicksort(ByVal L As Long, ByVal R As Long, ByRef mA() As Long) _
'hier das letzte long ggf auch anpassen
Dim i As Integer
Dim j As Integer
Dim M As Long
Dim Tmp As Long
If R <= L Then Exit Sub
i = L
j = R
M = mA((L + R) / 2)
Do
Do While mA(i) < M
i = i + 1
Loop
Do While mA(j) > M
j = j - 1
Loop
If i <= j Then
Tmp = mA(i)
mA(i) = mA(j)
mA(j) = Tmp
i = i + 1
j = j - 1
End If
Loop Until i > j
If L < j Then Quicksort L, j, mA()
If i < R Then Quicksort i, R, mA()
End Sub das funktioniert aber nur ohne namen | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 30.04.24 07:49 |
| und wie kommt nun der Gerd und der Otto und die anderen zu ihren nullen?? und ich muss die nullen wieder wegbekommen weil
Platz 1 Gerd 0015
Platz 2 Otto 0155
Platz 3 Frant 1067
sieht nicht schön aus finde ich
Danke | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 30.04.24 17:36 |
| Hallo!
Mache es halt "dirty".
Deklariere ein Double-Array in Listenlänge und gehe die Liste in einer Schleife durch.
Extrahiere bei jedem Eintrag die Zahl, addiere den durch 1000 dividierten Index
und trage diesen Wert ins Array ein.
Sind es mehr als 999 Einträge in der Liste, dann halt Division durch 10000.
(Die Zahlenwerte in den Einträgen dürfen aber nicht mehr als fünf- bzw. vier-stellig sein.)
Sortiere das Double-Array (numerisch).
Erstelle ein String-Array in Listenlänge und eine Integer-Variable (index).
Danach kannst Du das sortierte Array in einer Schleife (Schleifen-Variable i) durchgehen.
Ziehe jeweils vom Doublewert den Ganzzahl-Anteil ab und multiplizierte das Ergebnis mit 1000(0) (in "Index").
Jetzt weißt Du, welcher Listbox-Index-Eintrag an die Stelle des aktuellen Schleifen-Index gehört.
string_array(i) = listbox.list(index)
Die Array-Elemente kannst Du dann über eine Schleife in die geleerte Listbox eintragen.
Wie gesagt: dirty! | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 30.04.24 20:26 |
| ok danke aber wie sieht sowas in VB-Code aus??
Danke | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Kuno60 | Datum: 30.04.24 22:10 |
| Übrigens funktioniert die Sortierung auch, wenn du die Nullen durch Leerzeichen (" ") ersetzt. | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 01.05.24 03:09 |
| Hallo!
Tja, ich benutze seit Jahren VB6 nicht mehr.
Mal angenommen, man hätte eine Listbox "List1" auf das Formular gezogen ....
Public Sub SortDemo()
'Hilfsvariablen
Dim i As Integer, k As Integer, r As Integer, num As String
'Referenz auf die Listbox besorgen (optional)
Dim lbo As ListBox
Set lbo = List1
'gleichabständige Schrift einstellen
lbo.Font.Name = "Courier"
'Testeinträge in die Liste schreiben / zufällige Punktwerte
Randomize
For i = 0 To 2000
r = CInt(Rnd * 10000)
num = CStr(r)
While Len(num) < 5
num = " " & num
Wend
lbo.AddItem (num & " " & vbTab & "bla bla bla")
Next i
'Aufbau des Hilfsarray für das Sortieren
Dim dbl() As Double
ReDim dbl(1 To lbo.ListCount)
Dim pos As Integer
For i = 0 To lbo.ListCount - 1
pos = InStr(lbo.List(i), vbTab)
dbl(i + 1) = Mid(lbo.List(i), 1, pos - 1) + i / 10000
Next i
'simple Sortier-Doppelschleife
Dim inter As Double
For i = 1 To UBound(dbl) - 1
For k = i + 1 To UBound(dbl)
If dbl(i) > dbl(k) Then
inter = dbl(i)
dbl(i) = dbl(k)
dbl(k) = inter
End If
Next k
Next i
'Aufbau eines sortierten Stringarray
'aus der Listbox-Liste und dem Hilfsarray
Dim str() As String
ReDim str(0 To lbo.ListCount - 1)
For i = 0 To UBound(str)
r = CInt((dbl(i + 1) - CInt(dbl(i + 1))) * 10000)
str(i) = lbo.List(r)
Next i
'Übertragen des String-Array in die geleerte Listbox
lbo.Clear
For i = 0 To UBound(str)
lbo.AddItem (str(i))
Next i
End Sub | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 01.05.24 11:17 |
| Hallo!
Da ist ein C zu viel drin.
Die CINT-Methode rundet, die INT-Methode gibt den ganzzahligen Anteil.
r = CInt((dbl(i + 1) - Int(dbl(i + 1))) * 10000) | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 03.05.24 10:25 |
| Danke nochmals an alle Helfer 😀
AAaaaaber irgendetwas läuft da nicht rund
Wenn ich z.B. Otto mit 65 hinzufüge geht das aber sobald die zahl 100 oder höher ist funktioniert das nicht mehr
Dim v as Variant
Dim lbgt as String
Private Sub LblBGTemp_Change()
lbgt = Trim(LblBGTemp.Caption)
End Sub
Private Sub LblBildMenü_Click(Index As Integer)
if Index = 1 Then
If ListBesten3(smb).ListCount = 5 Then
v = Split(ListBesten3(smb).List(0), vbTab)
If lbgt > v(0) Then ListBesten3(smb).List(0) = LblBGTemp.Caption & vbTab _
& LblInfo(0).Caption
End If
End If
End Sub auch wenn ich die Variable lbgt durch LblBGTemp.Caption ersetze macht das kein unterschied.
Woran liegt das nun und wie bekomm ich das hin??
Danke | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 03.05.24 15:51 |
| Hallo!
Befasse Dich zunächst mit Datentypen.
Konvertiere Strings, die Ziffernfolgen enthalten in Integer-Werte (v(0), lbgt),
ehe du vergleichst. Solche Zeichenfolgen werden sonst alphanumerisch verglichen. | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 04.05.24 09:48 |
| das hab ich bei euch gefunden nur... 😕
Public Function lbgt(Value As Variant, Optional Default As Integer) As Integer
On Local Error Resume Next
lbgt = CInt(Value)
If Err.Number Then
Err.Clear
lbgt = Default
End If
End Function Ich hab damit versucht, ja nur versucht die Variable lbgt umzuwandeln
aber hier gibts schon gemecker
Private Sub LblBGTemp_Change()
lbgt = Trim(LblBGTemp.Caption)
End Sub Fehler beim Kompilieren
Funktionaaufruf auf der linken Seite der Zuweisung muss den
Typ Variant oder Object zurückgeben
ehrlich gesagt ist das Neuland ich hab noch nie Variable umgewandelt. Bisher brauchte ich sowas noch nicht. Nun steh ich da wie der Ochs vorm Tor 😳 | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Manfred X | Datum: 04.05.24 13:32 |
| Hallo!
Du schreibst eine eigene Konvertierungsroutine "lbgt" mit Parametern.
(Ich würde die Nutzung der IsNumeric-Methode empfehlen, um den Parameter zu testen.)
Diese Funktion muss natürlich entsprechend gerufen werden.
Vielleicht so:
Dim i as integer
i = lbgt(trim(lblBgtemp.caption)) | |
Re: Listbox mit vbTab Zahlen sorten | | | Autor: Hank-15 | Datum: 04.05.24 14:09 |
| Ja Danke nur wie schriftlich gesagt ich hab sowas noch nie gemacht weil ichs wohl bisher nicht gebraucht hab 😟 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|