Random mit Zahlen, Zeichen und Buchstaben

    • Release

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Tobolobo.

      Random mit Zahlen, Zeichen und Buchstaben

      Hallo,
      ich habe mich in letzter Zeit ein wenig mit der Random Funktion beschäftigt. Dann habe ich mich rangesetzt und eine Random Lib geschrieben. Sie funktioniert zu 100%, da ich sie ja selbst Testen kann :P .

      Edit: Random Modes hinzugefügt hab ich vergessen :thumbdown: . Ich wundere mich, dass es durch die überprüfung deswegen gekommen ist.
      Hab auch noch mehrere Rechtschreibfehler verbessert.

      Mit ihr kann man:
      -Zahlen generieren:
      ->bestimmte Anzahl,
      ->Zahlen können ausgeschlossen werden.

      -Buchstaben generieren:
      ->bestimmte Anzahl,
      ->Buchstaben können ausgeschlossen werden,
      ->Mode (wird später erklärt).

      -Zeichen generieren:
      ->bestimmte Anzahl,
      ->Zeichen können ausgeschlossen werden.

      -'Alles' generieren:
      ->bestimmte Anzahl,
      ->Buchstaben/Zahlen/Zeichen können ausgeschlossen werden,
      ->Mode (wird später erklärt).

      Die Klasse (RandomDll) enthält die Funktionen:
      Zahlen(Anzahl, Ausschluss),
      Buchstaben(Anzahl, Ausschluss, Mode),
      Zeichen(Anzahl, Ausschluss),
      Alles(Anzahl, Ausschluss, Mode).

      Kein Standardnamespace!

      Nun zu 'Mode': Ich habe das eingebaut, dass man Großbuchstaben, Kleinbuchstaben, aber auch beides generieren kann ^^ . (In Buchstaben()). Mit den Funktionen kann man sich viel Code sparen :thumbsup: . Das habe ich alles gemacht, da ich viele Threads gesehen hab, in denen Leute nach so etwas gesucht haben. Es ist meine erste Lib, die ich bisher mit VB gemacht habe.

      Beispiel zum Aufrufen (Das gleiche wie im TestProgramm, Form1):

      VB.NET-Quellcode

      1. Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. Try
      3. Me.Enabled = False
      4. Dim Button1 As String = RandomDll.Zahlen(TextBox1.Text, TextBox2.Text)
      5. My.Computer.FileSystem.WriteAllText("C:\Random", Button1, True) 'Zum übermitteln an andere Form
      6. Me.Visible = False
      7. Form2.Visible = True
      8. Me.Enabled = True
      9. Catch ex As Exception
      10. MsgBox("Bitte alle Felder richtig ausfüllen!", 16, "Fehler")
      11. Me.Enabled = True
      12. End Try
      13. End Sub


      Im Anhang ist auch eine Anwendung, mit der ihr die Lib testen könnt ;) .

      Benötigt wird .Net Framework 4.0 (muss noch versuchen ob die auch mit 3.5 oder niedriger geht.)
      Geschrieben mit Visual Basic 2010 Express.
      Kann überall verwendet werden, aber mein Name muss einmal erscheinen :D .

      Mfg.
      Tobolobo
      Dateien
      • Random.dll

        (36,86 kB, 127 mal heruntergeladen, zuletzt: )
      • Tester.rar

        (130,22 kB, 111 mal heruntergeladen, zuletzt: )
      • Random Modes.txt

        (529 Byte, 146 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Tobolobo“ ()

      Alter Verwalter ...
      Da die "Funktion" imho üblicherweise nicht mehr als 5 Zeilen braucht, habe ich mir mal im Reflector angeschaut, was du gemacht hast.

      Fleiß: 1000 Punkte
      Der Rest: oi oi oi ...

      Wenn es WENIGSTENS Select Case gewesen wäre, aber mehrere Hundert "if num = foo then buchstabe="bar"" ist jetzt echt mega-heftig.
      Meinst du nicht, du solltest das ganze ggf noch etwas "eindampfen"?
      @Memo:
      Ich hab mich mit Enums noch nicht so beschäftigt^^

      @picoflop:
      Wirklich 5 Zeilen? Ich hab jetzt 2075 Zeilen insgesamt. :D Und wo du es schon erwähnst, ich komme einfach mit If besser zurecht.
      Wieso kleiner machen? Es geht schnell genug und das Ausschlussverfahren finde ich auch gut. Ich hab hald da nicht so gedacht aber dafür mehr geschrieben.

      Nimmst du den Reflector? reflector.net/
      ich komme einfach mit If besser zurecht.

      Ehrlich?

      VB.NET-Quellcode

      1. If num = foo1 Then
      2. Buchstabe = "Bar1"
      3. ElseIf num = foo2 Then
      4. Buchstabe = "Bar2"
      5. '...
      6. End If

      Sieht für Dich schöner aus / ist für Dich leichter zu schreiben als

      VB.NET-Quellcode

      1. Select Case num
      2. Case foo1
      3. Buchstabe = "Bar1"
      4. Case foo2
      5. Buchstabe = "Bar2"
      6. '...
      7. End Select


      Aber zum Thema Enum:

      VB.NET-Quellcode

      1. Enum Bla As Integer
      2. Foo = 1
      3. Bar = 2
      4. DasIst5 = 5
      5. DasIstAuch5 = 5
      6. Ebenfalls = 5
      7. End Enum


      Beim Verwenden:

      VB.NET-Quellcode

      1. Dim Asdf As Bla = Bla.DasIst5
      2. If Asdf = Bla.Ebenfalls Then 'Weil DasIst5 und Ebenfalls beide mit 5 enumeriert sind ist das wahr
      3. 'Alle Elemente eines Enums iterieren:
      4. For Each i As Bla In [Enum].GetValues(GetType(Bla))
      5. ListBox1.Items.Add(i.ToString)
      6. Next
      7. End If
      8. 'Enum aus String parsen:
      9. Dim jklö As Bla
      10. If [Enum].TryParse(Of Bla)(ListBox1.SelectedItem.ToString, jklö) Then
      11. MessageBox.Show("Jup")
      12. End If
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Niko Ortner“ () aus folgendem Grund: Zitat korrigiert

      Tobolobo schrieb:

      das Ausschlussverfahren finde ich auch gut

      Zum "ausschließen" gibts für "Listen" übrigens einen extra "Befehl": Except ;)

      Dann könnte das ganze auf wenige Zeilen reduziert zb so aussehen:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      2. Debug.Print(foo("ABCDEF", "BC", 5))
      3. End Sub
      4. Private Function foo(ByVal use As String, ByVal notuse As String, count As Integer) As String
      5. Static r As New Random
      6. Dim base As IEnumerable(Of Char) = use.Except(notuse)
      7. If base.Count = 0 OrElse count < 1 Then Return String.Empty
      8. Return Join((From i In Enumerable.Range(1, count)
      9. Select Convert.ToString(
      10. base(r.Next Mod base.Count)
      11. )
      12. ).ToArray, ""
      13. )
      14. End Function


      Nur um zu zeigen, dass "überlegen" manchmal deutlich lustiger als "Fleiß" ist ...