tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
619
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Helmsen Helmsen ist offline Grünschnabel
    Registriert seit
    Jun 2010
    Beiträge
    4
    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
     

  2. #2
    Avatar von Chumper
    Chumper Chumper ist offline Eichhörnchen
    Registriert seit
    Mar 2006
    Ort
    Vancouver
    Beiträge
    440
    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!

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    Code 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
    Ausgabe
    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

  4. #4
    Helmsen Helmsen ist offline Grünschnabel
    Registriert seit
    Jun 2010
    Beiträge
    4
    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.
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  6. #6
    Helmsen Helmsen ist offline Grünschnabel
    Registriert seit
    Jun 2010
    Beiträge
    4
    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.
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  8. #8
    Helmsen Helmsen ist offline Grünschnabel
    Registriert seit
    Jun 2010
    Beiträge
    4
    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

  1. Großes Bild in Kleines kopieren
    Von vandamp im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 04.07.10, 20:00
  2. Kleines großes Problem - Sound in image maps
    Von Röschen im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 27.12.07, 11:50
  3. kleines großes scrollPane Problem
    Von Cyruss_Marchelly im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 02.07.05, 15:08
  4. Kleines großes Problem: Menüleiste weg
    Von bocadillochef im Forum Vektor-Programme
    Antworten: 3
    Letzter Beitrag: 01.04.05, 20:08
  5. Ein Großes kleines Problem!
    Von maho15 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 18.07.02, 11:37

Stichworte