ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
619
619
EMPFEHLEN
-
Hi,
jetzt sitze ich schon knappe 12 Std an meinem Problem und finde keine Lösung. Zumindest keine die in der Prazis funktioniert. Eigentlich habe ich genug Ehrgeiz Probleme und zwar gerade solch schwere selbst zu lösen, denn genau solche Schwierigkeiten bringen ja erst dne Spaß, aber da ich zeitlich unter Druck stehe (muss mein Programm bald in der Schule abgeben) muss ich euch um Rat bitten.
Es geht darum, dass ich mir Zufallspassworte in einer Listbox ausgegeben lassen habe. Länge und Anzahl dieser sind variabel definierbar. Das Problem stellt sich bei der Programmierung, des Commandbuttons, welcher jegliches Passwort, welches mehrfach vorhanden ist aussortieren soll. So, dass jedes Passwort dann nurnoch einmal in meiner Listbox vorkommt.
Angefangen habe ich damit, einen Array mit den ausgegebenen Passwörtern zu füllen ( "Inhalt()"). Dann habe ich damit verschiedenste Ideen durchgearbeitet (leider hat noch keine in der Praxis funktioniert).
Eine Grundidee war, den Array Inhalt() mittels 2 For Next Schleifen zu durchsuchen und bei gefundener Doppelung von Passwörter einfach den Array ab dem identischen Passwort aufrücken zu lassen.
Eine andere Methode die mich sehr viel Zeit gekostet hat, war die Passwörter aus dem Array Inhalt() in den Array InhaltA() zu übergeben, so lange sie nicht doppelt vorkamen.
Programmcodes kann ich im Moment leider keine Posten, da ich sie immer mit meinen Neueren Ideen überschrieben habe und jetzt nurnoch ein halb fertiges Konstrukt der Verzweiflung in einem Programm besteht. Morgen ist mein letzter Tag, den ich Zeit bekommen habe, deshalb bin ich um jegliche konstruktive Hilfe dankbar. Am besten wäre ein fertiger Programmcode. Denn wie erwähnt, mangelt es mir nicht an Ideen, nur an den Umsetzungen.
In großer Zuversicht, Helmsen
-
Du solltest gleich bei der Generierung des Passwortes darauf achten, dass es nicht doppelt vorkommt.
Also machst du das so:
Code :1 2 3
$pass = generiere_passwort(); while ($pass ist in Array $alle_passwoerter) $pass = generiere_passwort();
€dit:
Und damit du nicht ganz ohne Link dastehst:
http://www.vbarchiv.net/tipps/tipp_2...-6-aus-49.html
Hier geht es um Lottozahlen, beinhaltet aber genau dein Problem, ich hoffe du findest damit die Lösung.mfg Nils
Problem gelöst?
Dann bitte das Thema als erledigt anhaken
und die Antwort bewerten, die weitergeholfen hat.
Danke!
-
Ich habe mir vor langem mal diverse Array-Funktion zu VB6/VBA erstellt, damit dort die Array überhaubt brauchbar werden.
http://wiki.yaslaw.info/wikka/VbaArrayFunctions
Dort fuindest du auch die Funktion ArrayIndex(). Damit kannst du prüfen ob ein Wert im Array ist (also das was Chumper schreibt)
Ergibt dann etwa folgenden Code (Alle notwendigen Array_funktionen dazu findest du auf der ober erwähnten Seite. Am besten einfach den ganzen Code aus meinem Wiki in ein Module mit dem Namen ArrayFunctions kopieren)
Code vb:1 2 3 4 5 6 7 8 9 10 11 12
Public Sub deleteDublicateStringEntriesInArray(ByRef ioArray() As String) Dim retArray() As String For i = LBound(ioArray) To UBound(ioArray) ' Wenn der Eintrag im Return-Array noch nicht vorhanden ist, diesen kopieren If ArrayIndex(ioArray(i), retArray) < 0 Then Call pushArray(retArray, ioArray(i)) End If Next i ioArray = retArray End Sub
Hab natürlich auch ein Testscript dazu geschrieben
AusgabeCode vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Public Sub testDeleteDublicateEntriesInArray() Dim myArray() As String ' Testdaten erstellen Call pushArray(myArray, "abcde") Call pushArray(myArray, "klmno") Call pushArray(myArray, "fghij") Call pushArray(myArray, "abcde") ' Funktionsaufruf Call deleteDublicateStringEntriesInArray(myArray) ' Ausgabe For i = LBound(myArray) To UBound(myArray) Debug.Print myArray(i) Next i End Sub
Code :1 2 3
abcde fghij klmno
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Erstmal vielen dank für eure Hilfe!
Aber meine Kenntnisse reichen nicht aus um eure Codes zu verstehen. Zur Veranschaulichung des Niveaus hier mal mein derzeitiger Versuch:
OptionExplicit
Dim Inhalt() As String
Dim AnzahlPos As Integer
Dim NummerNeu As Integer
Dim A As Boolean
Dim abschneiden As Integer
Dim I As Integer
Dim N As Integer
Dim M As Integer
Private Sub cmdDoppelt_Click()
AnzahlPos = lstAusgabe.ListCount - 1
ReDim Inhalt(AnzahlPos + 2)
N = 0
M = 1
A = False
abschneiden = 0
'Array mit Passwörtern füllen
For I = 0 To AnzahlPos
Inhalt(I) = Mid(lstAusgabe.List(I), 7, Len(lstAusgabe.List(I))) 'Passwörter müssen von ihrer Nummerierung getrennt werden
Next I
'Listbox leeren
lstAusgabe.Clear
'Arrays neu ordnen
Do While N <= AnzahlPos
M = 1
Do While M <= AnzahlPos
If Inhalt(0) <> Inhalt(M) Then
M = M + 1
A = True
Else
A = False
M = AnzahlPos + 1
End If
Loop
If A = True Then
Inhalt(AnzahlPos + 1) = Inhalt(0)
For I = 0 To AnzahlPos
Inhalt(I) = Inhalt(I + 1)
Next I
ElseIf A = False Then
'!!Dieser Abschnitt muss noch programmiert werden. Der Array muss "aufrücken", sodass Inhalt(0) überschrieben wird
End If
N = N + 1
Loop
'Ausgabe
For I = 0 To AnzahlPos - abschneiden
Ausgabe = Format(NummerNeu & ".", "!@@@@@@") & Inhalt(I) 'Passwörter wieder mit Nummern versehen
lstAusgabe.AddItem Ausgabe
NummerNeu = NummerNeu + 1
Next I
NummerNeu = 1
End Sub
Allgemein ist die Idee, dass Inhalt(0) mit allen anderen Passwörtern verglichen wird. Ist keines gleich wird Inhalt(0) "ganz hinten im Arrays angestellt". Gibt es ein gleiches wird Inhalt(0) überschrieben. Dies wird solange gemacht bis jedes Passwort einmal bei Inhalt(0) stand, dann ist die alte Reihenfolge wiederhergestellt nur ohne die Doppelten und das ganze kann ausgegeben werden.
-
item: Habs jetzt mal nicht gelsen weil so unformatiert ists echt nicht einfach. Schreib es bitte in [VB]dein Code[/VB]. Gerade die Schleifen sind so nur schwer mit abzählen zu ermitteln
item: Frag was du nicht verstehst. Schau dir Befehle an die du nicht kennst. Weil
a) du dabei etwas lernst
b) es für uns (auf alle Fälle für mich) fast nicht möglich ist mit einem anderen Wissensstand zu programmieren
c) ich mir Mühe gab dir einen getesteten Code zu leifern den du mittels debug einfach mal durchgehen kannst.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Entschuldigt meine Unwissenheit. Nächstes mal werd ichs beachten. Dieses Problem hat sich aber erstmal erledigt, hab nämlich eine Möglichkeit gefunden.
Also bis zum nächsten mal, Helmsen.
-
Dann solltest du für andere User die hier landen deine Möglichkeit presentieren
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Code vb:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
Option Explicit Dim I As Integer Dim N As Integer Dim M As Integer Dim AnzahlPos As Integer Dim Ausgabe as string Dim Abschneiden as integer Dim Inhalt() as string Private Sub cmdDoppelteLoeschen_Click() AnzahlPos = lstAusgabe.ListCount - 1 ReDim Inhalt(AnzahlPos + 1) M = 0 N = 1 Abschneiden = 0 'Array mit Passwörtern füllen For I = 0 To AnzahlPos Inhalt(I) = Mid(lstAusgabe.List(I), 7, Len(lstAusgabe.List(I))) Next I lstAusgabe.Clear 'Arrays überprüfen Do While M <= AnzahlPos 'Jedes Passwort der Reihe nach als Vergleichsmaßstab verwenden N = 1 + M Do While N <= AnzahlPos 'Jedes folgende Passwort zum Vergleich heran ziehen If Inhalt(M) = Inhalt(N) And Inhalt(N) <> "" Then 'Letzte vernachlässigen If Inhalt(N) = Inhalt(N + 1) Then M = M - 1 'Derzeitiges M muss noch einmal durchlaufen werden End If For I = N To AnzahlPos Inhalt(I) = Inhalt(I + 1) Next I Abschneiden = Abschneiden + 1 End If N = N + 1 Loop M = M + 1 Loop 'Ausgabe Nummer = 1 For I = 0 To AnzahlPos - Abschneiden Ausgabe = Format(Nummer & ".", "!@@@@@@") & Inhalt(I) lstAusgabe.AddItem Ausgabe Nummer = Nummer + 1 Next I End Sub
Und so wird die Listbox LstAusgabe nach doppelten Ausgaben überprüft und ggf werden diese entfernt.
Ähnliche Themen
-
Großes Bild in Kleines kopieren
Von vandamp im Forum PhotoshopAntworten: 5Letzter Beitrag: 04.07.10, 20:00 -
Kleines großes Problem - Sound in image maps
Von Röschen im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 27.12.07, 11:50 -
kleines großes scrollPane Problem
Von Cyruss_Marchelly im Forum Flash PlattformAntworten: 4Letzter Beitrag: 02.07.05, 15:08 -
Kleines großes Problem: Menüleiste weg
Von bocadillochef im Forum Vektor-ProgrammeAntworten: 3Letzter Beitrag: 01.04.05, 20:08 -
Ein Großes kleines Problem!
Von maho15 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 18.07.02, 11:37





Zitieren

Login





