Bytevariablen

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von optz.

    Bytevariablen

    Hi,

    ich möchte zwei Byte variablen vergleichen und das Zeichen für Zeichen.
    Ich habe so angefangen, dass ich Jeweils die erste Zahl von der einen Byte variable mit der ersten von der anderen Variable vergleiche.
    Dann will ich die Erste Zahl löschen und immer so weiter....
    Außerdem soll immer wenn die Bytes gleich sind in einer Textbox die Zahl +1 gerechnet werden, damit wenn der Inhalt wieder Ungleich ist dort der Abstand wie beim Original ist.

    Man könnte das auch mit Textboxen machen aber wenn ich versuche den Inhalt der Byte variablen in eine Textbox zu kriegen Steht da nur Systhem.Byte[] ...
    Hier ist erstmal mein Code :


    Public Class Form1
    Dim einste, zweite, länge, ba, tmpname As String
    Dim bt1(), bt2() As Byte
    Dim rand As New System.Random
    Dim abs As Integer


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
    OpenFileDialog1.ShowDialog()
    einste = OpenFileDialog1.FileName

    OpenFileDialog1.ShowDialog()
    zweite = OpenFileDialog1.FileName

    bt1 = My.Computer.FileSystem.ReadAllBytes(einste)
    bt2 = My.Computer.FileSystem.ReadAllBytes(zweite)

    Do
    länge = bt2.Length
    ba = bt2.First
    If bt1.First = bt2.First Then

    TextBox3.Text += 1

    Else
    If Not TextBox3.Text = "" Then

    abs = TextBox3.Text
    For i As Integer = 1 To abs
    TextBox4.Text += " "

    Dim i1 As Integer = 0
    If i1 = abs Then

    Exit For

    End If
    i1 += 1
    Next

    TextBox4.Text += ba

    End If


    End If
    Try
    ' Hier soll die Löschanweisung hin
    Catch ex As Exception
    Exit Do
    End Try

    Loop

    ' Ergebnis in Datei schreiben
    tmpname = rand.Next(1, 100)

    If IO.File.Exists("C:\Users\User\Desktop\" & tmpname) Then
    tmpname = rand.Next(1, 100)
    My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False)
    Else

    My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False)

    End If
    Catch ex As Exception
    End Try

    End Sub
    End Class


    Danke schonmal im Vorraus


    MfG
    optz
    dein Code kann keiner lesen - Bitte VB-Tag benutzen - aber richtig, und bitte! Paste den Code neu ein, damit die Einrückungen so übernommen werden, wie du sie in deiner IDE hast!

    @Topic: für so Vergleiche gibts mächtige Unterstützung, das kann man u.U. mit einem Einzeiler abhandeln.
    Mehr dazu, wennich dein Code lesen kann
    Willkommen im Forum. :thumbup:
    Bitte gib Deinem Code zunächst Option Strict On, denn Du vermengst Äpfel und Glühbirnen.
    Eliminiere die angezeigten Fehler (meist genügt ein .ToString) und poste dann den Code erneut.
    Drück auf den [ VB ]-Button und füge danach den Code per C&P ein.
    Vielleicht kannst Du auch in 2 Code-Zeilen ausdrücken, was Du vergleichen willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim einste, zweite, länge, ba, tmpname As String
    3. Dim bt1(), bt2() As Byte
    4. Dim rand As New System.Random
    5. Dim abs As Integer
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. Try
    8. OpenFileDialog1.ShowDialog()
    9. einste = OpenFileDialog1.FileName
    10. OpenFileDialog1.ShowDialog()
    11. zweite = OpenFileDialog1.FileName
    12. bt1 = My.Computer.FileSystem.ReadAllBytes(einste)
    13. bt2 = My.Computer.FileSystem.ReadAllBytes(zweite)
    14. Do
    15. länge = bt2.Length
    16. ba = bt2.First
    17. If Not bt1.First = bt2.First Then
    18. TextBox3.Text += 1
    19. Else
    20. If Not TextBox3.Text = "" Then
    21. abs = TextBox3.Text
    22. For i As Integer = 1 To abs
    23. TextBox4.Text += " "
    24. Dim i1 As Integer = 0
    25. If i1 = abs Then
    26. Exit For
    27. End If
    28. i1 += 1
    29. Next
    30. TextBox4.Text += ba
    31. End If
    32. End If
    33. Try
    34. bt1 = bt1.
    35. bt2 =
    36. Catch ex As Exception
    37. Exit Do
    38. End Try
    39. Loop
    40. tmpname = rand.Next(1, 100)
    41. If IO.File.Exists("C:\Users\User\Desktop\" & tmpname) Then
    42. tmpname = rand.Next(1, 100)
    43. My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False)
    44. Else
    45. My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False)
    46. End If
    47. Catch ex As Exception
    48. End Try
    49. End Sub
    50. End Class


    Hier der Formatierte Code...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „optz“ ()

    optz schrieb:

    Hier der Formatierte Code...
    Fein. Nun noch Option Strict On.

    optz schrieb:

    TextBox3.Text += 1
    Was soll da rauskommen?
    "Apfel" + 1 = "Äpfel"
    oder
    "Apfel" + 1 = "Apfel1"
    :?: :?: :?: :D :D :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Bitte benutz den IO- statt dem My-Namespace. Ich würde mir dafür: My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname ne Fileinfo erstellen. Außerdem benutzte für den Pfad IO.Path.Combine. Dann kannst du nicht einfach einen String Plus-Rechnen:

    VB.NET-Quellcode

    1. TextBox3.Text += 1


    Außerdem: Was passiert, wenn zum Schluss die Datei auch vorhanden ist?:

    VB.NET-Quellcode

    1. If IO.File.Exists("C:\Users\User\Desktop\" & tmpname) Then
    2. tmpname = rand.Next(1, 100)
    3. My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False) '<<<< Was ist dann?
    4. Else
    5. My.Computer.FileSystem.WriteAllText("C:\Users\User\Desktop\" & tmpname, TextBox4.Text, False)
    6. End If


    Ich würde da ne Schleife reinsetzten ;)
    Mfg
    Vincent

    also die Gleichheit prüfst du ganz einfach mit

    VB.NET-Quellcode

    1. messagebox.show(bt1.SequenceEquals(bt2).Tostring)


    post#1 schrieb:

    Außerdem soll immer wenn die Bytes gleich sind in einer Textbox die Zahl +1 gerechnet werden, damit wenn der Inhalt wieder Ungleich ist dort der Abstand wie beim Original ist.
    wat?
    welcher Abstand ist wie beim Original, wenn in einer Textbox eine Zahl gerechnet wird??

    Also erklär vlt. nochmal was du vorhast.
    also in textbox3 soll immer +1 gerechnet werden so lange bis der inhalt wieder ungleich ist
    dann soll ja in textbox4 des ungleiche geschrieben weren ..
    also das soll so aussehen :
    z.B.
    bt1 = 1100221232
    und
    bt2 = 1100000122

    dann soll in Textbox4 stehen : 1100_____2
    also _ = Lerzeichen
    ne das war ja bloß ein beispiel wie es dann aussheen soll...
    ich weiß halt nich wie ich das erklären soll :(
    naja das is ja auch erstma egal wichtiger is das ich die bytewariablen verglichen kriege :)
    aber halt pro byte nich als ganzes weil dann geht ja Equals
    aber das vergleicht ja nur das gesamte ich möchte halt jedes erste byte aus bt1 mit jedem ersten aus bt2 vergleichen
    ich weiß halt nich wie ich das erklären soll
    Ohne Problem-Spezifikation ist keine Hilfe möglich.

    nicht nur das Anzeige-Problem bleibt unspezifiziert, auch zum Vergleichen fehlen Angaben:

    Was passiert denn nu, wenn in bt2 das 2. Byte fehlt, ansonsten alles gleich?
    Gelten alle Bytes ab dem 2. Byte dann als unterschiedlich?

    edit:
    ich möchte halt jedes erste byte aus bt1 mit jedem ersten aus bt2 vergleichen
    wat?
    Das wäre ja

    VB.NET-Quellcode

    1. msgbox(bt1(0).Equals(bt2(0)).Tostring)
    Mach einfach mal ein Beispiel wie es im günstigsten und im ungünstigsten Fall aussehen kann und was da jeweils angezeigt werden soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also in Pos#10 sieht es so aus als wolltest du Zeichenketten "vergleichen" - das da grade der Wert eines Bytes als Zeichenkette vorliegt ist nebensache. Da könnte auch "Haus" und "Maus" stehen und das Ergebnis wäre "_aus" - richtig?
    Bei den einzelnen Zeichen spricht man dann aber nichtmehr von Bytes, sondern eben von Zeichen (Datentyp: Char). Das Ganze ist eine Zeichenkette (String). Ein Byte ist eine Zahl, die du mittels .toString in eine Zeichenkette 'überführen' kannst.

    Also Byte vergessen und die String-Methoden ansehen. Z.B. .padLeft/Right könnten hilfreich sein um an die Zeichenketten ausreichend 0en anzufügen. Anschließend kannst du die beiden gleichlangen (!) Strings mit einer For-Schleife abklappern und so Zeichen für Zeichen vergleichen. Btw: ein einzelnes Zeichen ist kein Byte, sondern ein Char.

    Ganz wichtig: Option Strict On!

    optz schrieb:

    oder nich?


    Das mußt du spezifizieren, ob alle folgenden dann als unterschiedlich gelten sollen oder nicht. Kommt drauf an, wozu du das brauchst. In manchen Szenarien könnte man sie als gleich auffassen, in anneren als unterschiedlich.
    Ein Herr Levensthein hat sich sogar eine Masseinheit für Unterschiedlichkeiten ausgedacht, nämlich die Levensthein-Differenz zweier Sequenzen sagt aus, mit wievielen atomaren Operationen man die eine Sequenz in die annere überführen kann.
    Das aber nur am Rande, weil das willst du bestimmt nicht programmieren ;)
    ja das mit _aus is richtig

    aber ich möchte ja aus einer datei die bytes auslesen und dann mit einer anderen vergleichen aus der ich ebenfalls die bytes auslese...
    wenn ich dann bt1.tostring schreibe steht in der textbox Systhem.Byte[]...


    ja es sollen alle weiteren als untersiedlich gelten ...