Buchstabenaustauscher per Visual Basic programmieren?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Buchstabenaustauscher per Visual Basic programmieren?

    Anzeige
    Hey,
    wie erstelle ich mir einen "Generator" bei Visual Basic der zum Beispiel das Wort "Beispiel" zu "ABCDEFGH" umberechnet?
    Ich habe schon in einem Textdokument das ganze Alphabet rein geschrieben, daneben stehen auch schon die Buchstaben die damit ersetzt werden sollen.
    Wenn es zu schwer sein sollte, kann es mir dann evtl. jemand programmieren?
    Ich hoffe schonmal auf hilfreiche Antworten.
    Grüße,
    Marc

    PS: Ich wusste nicht, wo diese Frage hin soll, also habe ich sie mal hier ins Off-Topic reingepackt, falls es aber einen Bereich dafür gibt, dann bitte verschieben. @sam
  • M4rciZockt schrieb:

    Hey,
    wie erstelle ich mir einen "Generator" bei Visual Basic der zum Beispiel das Wort "Beispiel" zu "ABCDEFGH" umberechnet?


    Mit Visual Basic meinst Du?

    - Visual Basic 6
    - VB Script?
    - VB.NET?

    Allgemeine Vorgehensweise, egal für welche Sprache, wäre Folgende:

    1. Jedes Zeichen deiner Zeichenkette einzeln auslesen. (das übliche, per Length/Count die Länge abfragen und dann in einer For-Schleife durchlaufen)
    2. Den ASCII-Wert des Zeichens ermitteln. A hat den Wert 65 -> siehe tabelle.info/ascii_zeichen_tabelle.html
    Ist in VB6 die Funktion ASC("A").
    3. Deine Buchstaben-Austauschliste könnte man in ein Array packen, welches von 65 bis 90 geht. Oder von 0 bis 90 und du füllst halt nur die Plätze von 65 bis 90.
    65 = U
    66 = X
    67 = R
    usw.
    4. Da Du jetzt z.B. den ersten Buchstaben von "Beispiel" am Wickel hast, dass wäre B und Du weisst, dass B der wert 66 ist, guckst Du in das Array auf Platz 66 und bekommst U.
    U wäre nun das erste Zeichen deiner neuen Zeichenkette die Du so zusammensetzt.

    Fertig.

    Das ist natürlich nur eine mögliche Vorgehensweise, aber so in der Art würde ich das machen. Und ich denke, dass ist auch eine gute Fingerübung um Dich mit der Thematik zu beschäftigen.
    Ach, eine andere Alternative wäre, dass Du kein Array für die Austauschbuchstaben benutzt, sondern auch nur eine Zeichenkette. Ja, das ist eleganter.

    Ich hacke mal so drauf los und übernehme keine Garantie, dass da nicht Tippfehler drin sind. Musste halt durchgucken.



    Public Function TauscheBuchstaben(text as String) as String
    Dim ersatzliste as String
    ersatzliste = "QWERTZUIOPASDFGHJKLYXCVBNM"

    Dim i as integer
    dim zeichen as String
    Dim asciiWert as long
    Dim original as String
    Dim retVal as String

    original = UCase(text) 'In Großbuchstaben umwandeln

    For i = 1 to Length(text)
    zeichen = Mid(text,i,1)
    asciiWert = Asc(zeichen)
    ' A z.b. hat den Wert 65. Wir suchen aber nicht in einem Array, sondern in unserer langen Ersatzzeichenfolge.
    'Dort steht das erste Zeichen an Position 1 (nicht an 65). Wir ziehen daher 64 von asciiWert ab. Nur so als Info.

    retVal = retVal & Mid(ersatzliste,asciiWert-64,1)
    Next

    TauscheBuchstaben = retVal
    End Function



    Bin mir recht sicher, dass das zu 99% so lauffähig ist. Ist jetzt ungetestet und ohne Visual Studio.


    PS: Kann mir mal jemand die blöde Quellcode-Funktion hier erläutern? Markieren und anklicken bringt nichts.
    [Quellcode] ist auch kein gültiger Tag. Das sieht ja scheisse aus, ohne Einrückungen!
  • ich kenn mich jetzt nicht mit vb wirklich aus, aber gibts da keine Funktion um auf teile des Strings zuzugreifen? In PHP zB. kann man auf einen String so zugreifen als wärs ein Char-Array, in C# würde man ein Dictionary anlegen welches als Index das zu ersetzende und als Inhalt das Ersetzende Zeichen hätte, einfach durch das Char-Array iterieren und jeden Buchstaben tauschen.

    PseudoCode (nicht lauffähig):

    Quellcode

    1. DIM TEXT AS STRING
    2. DIM CHANGE[CHAR] AS CHAR
    3. TEXT = "HALLO WELT"
    4. CHANGE["A"] = "Z"
    5. CHANGE["B"] = "Y"
    6. ...USW...
    7. CHANGE["Z"] = "A"
    8. FOR I = 1 TO LEN(STRING)
    9. TEXT[I] = CHANGE[TEXT[I]]
    10. NEXT
    11. PRINT TEXT
    Alles anzeigen
    ——YouTube————————————————————————————————————————————
    — Endlos-Projekte: Minecraft (SinglePlayer), Craft The World, Banished, Besiege, Sims4
    — ..Abgeschlossen: Leisure Suit Larry 6+7, Dishonored, Surface 2+3, Mirrors Edge, uvm
    — . Kurz- Projekte: The Tower, Fighting Is Magic, Euro Truck Simulator 2, uvm
    — ......Retro-Ecke: Day Of The Tentacle, Flight Of The Amazon Queen, NFS: HP2, uvm
    ————————————————————————————————————————————TbMzockt.de—
  • Anzeige
    Okay, scheint ein bissl. schwierig zu sein, da ich bisher fast garnix in VB programmiert habe. Und damit suche ich jetzt einen, der mir einen "Generator" programmiert, sollen 2 Textfelder sein, im ersten gibt man den Text ein, den man umgetauscht haben möchte, in dem zweiten wäre dann der fertige Text, dort kann man aber einen Text in dieser "Geheimschrift" reinschreiben, der wiederrum dann im ersten Textfeld sichtbar ist. Das müsste dann alles per Buttondruck machbar sein. Die Liste, welcher Buchstabe mit welchem vertauscht wird, kann ich demjenigen der es kostenlos macht, per PN zukommen lassen.
    Ich hoffe es gibt hier einen so netten, der das für mich macht :)
    Grüße,
    Marc
  • M4rciZockt schrieb:


    Ich hoffe es gibt hier einen so netten, der das für mich macht :)
    Grüße,
    Marc


    Du hast doch oben schon Hausfertigen Code von mir. 2 Textboxen wirst ja noch mit nem Button reinklicken können.

    Klingt ein wenig nach Hausaufgaben programmieren. Ich bin ja für "Hilfe zur Selbsthilfe". Ansonsten ist der reguläre Stundensatz für Freelancer derzeit bei 75,- Euro :)
  • Das Wort "Beispiel" soll in "ABCDEFGH" umgerechnet werden?

    Da fällt mir nur eine Enigma Verschlüsslung ein. Weil du hast e und auch i zwei mal vergeben und es soll dafür jeweils ein anderer Buchstabe rauskommen.

    UCase und LCase wären also total Sinnfrei dann.

    @TbMzockt
    Auch nicht grad das Ziel, oder? ^^



    Aber ich würd das gern noch mal klar stellen:

    In Textbox1 steht z.B.:
    Fritz ist jetzt Einkaufen

    Und in Textbox2 steht z.B.:
    ABCDEFGHIJKLMNOP... usw.

    Und jetzt sollen die Buchstaben aus Textbox1 mit der aus Textbox2 ausgetauscht werden, richtig?
    Zu beachten sei hier das mehrere gleiche Zeichen ein anderen Wert bekommen.

    Sowas kann man nur via einer Verschlüsslungsrechnung realisieren.

    Text1 ist dann der Klartext, Text2 der Schlüssel und Text3 (kann auch auf Text1 ausgegeben werden dann) der verschlüsselte Text.

    Das würde dann gehen.
    Man berechnet den Abstand zwischen den beiden Chars die sich in Text1 und Text2 gegenüberstehen und erhält dann den Wert um es später zu entschlüsseln.

    z.B.:
    "Beispiel" mit "ABCDEFGH"
    Erster Char: A - B
    65 - 66 = -1

    Zweiter Char: B - e
    66 - 101 = -35

    usw.

    Dann hast du den Schlüssel generiert. Wenn du diesen Schlüssel nun verwendest um den Text zu entschlüsseln, kommst du auf dein "ABCDEFGH" aus dem Wort "Beispiel". Das Prinzip kannste dann auch wieder umkehren.

    Beispielcode für VB6

    Quellcode

    1. 'Hinweis: Erstelle dir 5 Textboxen und ein Command Button.
    2. 'Text1 ist dein Klartext ("Beispiel")
    3. 'Text2 dein Zieltext ("ABCDEFGH")
    4. 'In Text3 wird der Schlüssel daraus berechnet den du brauchst
    5. 'In Text4 wird dir der Klartext anhand des Schlüssels wie erklärt verschlüsselt ("ABCDEFGH")
    6. 'In Text5 wird mittels dem Schüssel der Klartext ("Beispiel") aus dem Zieltext ("ABCDEFGH") wieder generiert
    7. 'Folgender Code ist im Command Button einzugeben:
    8. Dim codestr() As String
    9. Text3.Text = Chr(0)
    10. Text4.Text = Chr(0)
    11. Text5.Text = Chr(0)
    12. txtlength = Len(Text1.Text)
    13. If Len(Text2.Text) < txtlength Then Exit Sub
    14. 'Schlüssel generieren aus Klartext und Zieltext
    15. For i = 1 To txtlength
    16. Text3.Text = Text3.Text & Asc(Mid(Text2.Text, i, 1)) - Asc(Mid(Text1.Text, i, 1))
    17. If i < txtlength Then Text3.Text = Text3.Text & ","
    18. Next i
    19. 'Schlüsselzahlen spalten
    20. codestr = Split(Text3.Text, ",")
    21. 'Zieltext durch Schlüssel
    22. For i = 0 To txtlength - 1
    23. Text4.Text = Text4.Text & Chr(Asc(Mid(Text1.Text, i + 1, 1)) + CInt(codestr(i)))
    24. Next i
    25. 'Klartext aus Zieltext und Schlüssel
    26. For i = 0 To txtlength - 1
    27. Text5.Text = Text5.Text & Chr(Asc(Mid(Text4.Text, i + 1, 1)) - CInt(codestr(i)))
    28. Next i
    Alles anzeigen
  • Was das Thema Verschlüsselung angeht, hast Du natürlich vollkommen Recht.
    Ob's so gemeint ist, ist halt die Frage.

    Würde mich auch nicht wundern, wenn man einfach nur aus A B machen möchte ohne Rückkehrmöglichkeit.
    Die Beispielzeichenfolgen habe ich auch nur als Beispiel betrachtet. Trotzdem gutes Auge für die doppelten Buchstaben :)

    Das Sicherste ist sowieso immer noch doppelte ROT13-Verschlüsselung ;)
  • Naja, egal wie du es anstellst... du brauchst eine Basis. Du hast ja im Startpost ledeglich dein Klartext geschrieben und das was dabei rauskommen soll. Aber die Basis zur Berechnung fehlt dir ja. Und das ist der Schlüssel. Den bekommst du nur wenn du ihn A) selbst festlegen tust (Gibt es schöne Muster im Internet zu finden wie z.B. ein Verdrahtungsplan aus 3 Rollen (Enigma) oder halt andere schöne Verfahren.) oder B) du generierst dir deinen Schlüssel indem du aus dem Klartext und dem Zieltext dein persönlichen Schlüssel machst.

    Mein Verfahren da ist ein sehr simpler indem ich die Abstände zwischen den Buchstaben als Schlüssel verwendet habe. Mit dem Schlüssel kann dann codiert oder decodiert werden.

    Und das ist das was du suchst eigentlich. Wie er Verschlüsseln soll liegt bei dir. Kannst es ja noch mit XOR die Zahlen ein bisschen verwirren oder andere schöne Rechnungen.
    Beim Decodieren lässt du es nur andersherum berechnen ^^