Problem mit splitten und vergleichen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von klavierduo.

    Problem mit splitten und vergleichen

    hi
    hab ein problem : wenn ich eine variable den wert "splitted.count" gebe also die anzahl der splits, gibt das programm an, dass es 3 splittungen gibt, obwohl es nur 2 sein sollten.
    und wenn ich die variablen vergleiche, was ich mit einer schleife und einen zähler tue, sagt das programm, dass die variable und das gesplittete nicht zusammenpasst, obwohl es dieselben sind!!
    Der code:

    VB.NET-Quellcode

    1. ENTFERNT

    ich verzweifle da schon vollkommen
    Wer Rechtschreibfehler findet darf sie behalten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „joniator“ ()

    ja aba das hilft mir wenig beim vergleichen der variablen denn splitted(1)= myhnwid
    aba das programm nimmts nit!!
    Hier der neue code:

    VB.NET-Quellcode

    1. Private Sub databaseid()
    2. Dim splitted As String() = hwnidlist.Split(CChar(":"))
    3. Dim count As Integer
    4. count = splitted.Count
    5. Dim counter As Integer
    6. For i = 1 To count
    7. If splitted(counter) = myhwnid Then
    8. dpid = CStr(Val(counter) + Val("1"))
    9. MsgBox("ja")
    10. Exit For
    11. End If
    12. counter = CInt(counter + Val("1"))
    13. Next i
    14. Label5.Text = dpid
    15. End Sub


    Ps:

    VB.NET-Quellcode

    1. If joniator = "wird nicht geholfen" then
    2. joniator="dreht durch"
    3. else
    4. joniator = "is happy"
    5. end if
    Wer Rechtschreibfehler findet darf sie behalten :)
    dann setzt mal einen haltepunkt und schau was splitted(1) für einen Wert hat und welchen wert myhnwid hat. Poste das, wenn dir kein Fehler auffällt oder mache einen Screenshot.

    Edit: Gebe uns mal beispieldaten für hwnidlist und myhwnid. thx
    myhnwid=
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Flags()> _
    2. Private Enum DockInfo
    3. DOCKINFO_DOCKED = &H2
    4. DOCKINFO_UNDOCKED = &H1
    5. DOCKINFO_USER_SUPPLIED = &H4
    6. DOCKINFO_USER_DOCKED = &H5
    7. DOCKINFO_USER_UNDOCKED = &H6
    8. End Enum
    9. <StructLayout(LayoutKind.Sequential)> _
    10. Public Class HW_PROFILE_INFO
    11. <MarshalAs(UnmanagedType.U4)> _
    12. Public dwDockInfo As Int32
    13. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=39)> _
    14. Public szHwProfileGuid As String
    15. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
    16. Public szHwProfileName As String
    17. End Class
    18. <DllImport("advapi32.dll", SetLastError:=True)> _
    19. Private Shared Function GetCurrentHwProfile(ByVal lpHwProfileInfo As IntPtr) As Boolean
    20. End Function
    21. Declare Function GetVolumeInformationA Lib "kernel32" ( _
    22. ByVal PathName As String, _
    23. ByVal VolumeNameBuffer As StringBuilder, _
    24. ByVal VolumeNameSize As UInt32, _
    25. ByRef VolumeSerialNumber As UInt32, _
    26. ByRef MaximumComponentLength As UInt32, _
    27. ByRef FileSystemFlags As UInt32, _
    28. ByVal FileSystemNameBuffer As StringBuilder, _
    29. ByVal FileSystemNameSize As UInt32) As Long
    30. Private Shared Function ProfileInfo() As HW_PROFILE_INFO
    31. Dim profile As HW_PROFILE_INFO
    32. Dim profilePtr As IntPtr = IntPtr.Zero
    33. Try
    34. profile = New HW_PROFILE_INFO()
    35. profilePtr = Marshal.AllocHGlobal(Marshal.SizeOf(profile))
    36. Marshal.StructureToPtr(profile, profilePtr, False)
    37. If Not GetCurrentHwProfile(profilePtr) Then
    38. Throw New Exception("Error cant get current hw profile!")
    39. Else
    40. Marshal.PtrToStructure(profilePtr, profile)
    41. Return profile
    42. End If
    43. Catch e As Exception
    44. Throw New Exception(e.ToString())
    45. Finally
    46. If profilePtr <> IntPtr.Zero Then
    47. Marshal.FreeHGlobal(profilePtr)
    48. End If
    49. End Try
    50. End Function
    51. Private Shared Function GetVolumeSerial(ByVal strDriveLetter As String) As String
    52. Dim serNum As UInteger = 0
    53. Dim maxCompLen As UInteger = 0
    54. Dim VolLabel As New StringBuilder(256)
    55. Dim VolFlags As New UInt32()
    56. Dim FSName As New StringBuilder(256)
    57. strDriveLetter += ":\"
    58. Dim Ret As Long = GetVolumeInformationA(strDriveLetter, VolLabel, CType(VolLabel.Capacity, UInt32), serNum, maxCompLen, VolFlags, _
    59. FSName, CType(FSName.Capacity, UInt32))
    60. Return Convert.ToString(serNum)
    61. End Function
    62. Shared Function getHWID() As String
    63. Dim info As HW_PROFILE_INFO = ProfileInfo()
    64. Dim GUID As String = info.szHwProfileGuid.ToString()
    65. Dim volumeserial As String = GetVolumeSerial(Environment.SystemDirectory.Substring(0, 1))
    66. Dim md5Hasher As MD5 = MD5.Create()
    67. Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(GUID & volumeserial))
    68. Dim sBuilder As New StringBuilder()
    69. For i = 0 To data.Length - 1
    70. sBuilder.Append(data(i).ToString("x2"))
    71. Next i
    72. getHWID = sBuilder.ToString()
    73. End Function

    var von hnwid=

    Quellcode

    1. testtesttesttesttesttesttesttest:3bb431380ea5b184d16dfb89dc74ae0a

    var von myhnwid:

    Quellcode

    1. 3bb431380ea5b184d16dfb89dc74ae0a
    Bilder
    • Unbenannt.png

      9,76 kB, 257×159, 93 mal angesehen
    Wer Rechtschreibfehler findet darf sie behalten :)

    FreakJNS schrieb:

    verstehe ich das richtig, dass du eine auflistung von hnwid's hast und herausfinden willst in welcher zeile myhnwid steht?
    Wenn nicht, dann bitte mal genau erklären. Btw hnwid ist nicht hnwidlist oder?

    ja du siest es richtig
    ich will eine liste vergleichen und die id (die zahl in der reihenfolge bsp: 1,2,3,4,5,6 und die id is z.b. 4)
    will jz eig nur wissen warum das programm falsch vergleicht...
    Wer Rechtschreibfehler findet darf sie behalten :)
    okay - sind die hnwid's auch durch doppelpunkte getrennt - also:

    aaa:bbb:aaa:bbb:aaa:bbb

    oder durch leerzeilen:

    aaa:bbb
    aaa:bbb
    aaa:bbb

    erzähl mal etwas mehr - dein code ist aufjedenfall merkwürdig^^

    Edit: Damit eine Zeichenfolge unterschiedlich "erkannt" wird reicht schon ein einzelnes anderes Zeichen - ein Leerzeichen z.B.
    jo - welche Zeile hört sich nach einem vbCrLf (also dem Befehl für eine Neue Zeile anzufangen) an.

    Du musst zuerst Zeilenweise einlesen und dann jede Zeile beim ":"c splitten. Splittest du nur beim Doppelpunkt, dann passiert murks weil der NewLine-Befehl (vbCrLf oder Environment.newLine) teil der Zeichenkette ist. ich vermute da liegt der Fehler. Poste doch mal einen Datenbankauszug - die Kristallkugel ist gestern runtergefallen^^

    aaa:bbb NewLine
    ccc:ddd NewLine
    eee:fff NewLine
    Aber bitte, bitte, bitte verbessere Deinen Programmierstil und setz Dich mit den Datentypen auseinander. Bitte.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    ehrlich, nehm den Tipp ernst. Ieinen Kaudawelsch zusammenproggen kann jeder - sich dann wundern, warum man das Programm abschmiert wenn man "5 Piraten + die wurzel aus "hax0r" minus apfel" rechnet auch. Die Datentypen wurden ja nicht umsonst erfunden^^

    zeichenkette splitten

    ich weiß nicht, ob ich Dich richtig verstanden habe. Am einfachsten geht es vielleicht so

    Dim t AsString

    t =
    "das ist ein test"

    Dim s() AsString
    s = Split(t, " ")
    MsgBox(UBound(s))

    hier wird die Zeichenkette nach Leezeichen aufgetrennt. In der Feldvariablen s() stehen dann die einzeilen Ketten. In Ubound(s) also die Dimension des Feldes.