String in integer parsen funktioniert nicht ganz...

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von seby1302.

    String in integer parsen funktioniert nicht ganz...

    Hallo.

    Ich versuche grad ein String in integer zu parsen, im Normalfall klappt das auch ohne Problemen, aber im Verbindung zu einem string.replace will der einfach nicht und sagt Flasche Format.

    So gehts ohne Problemen ....

    VB.NET-Quellcode

    1. Dim test1 As String = "12365"
    2. Dim NewBitrate As Integer = Integer.Parse(test1)



    Aber so? :(

    VB.NET-Quellcode

    1. Dim Shell As New Shell32.Shell
    2. Dim Folder As Shell32.Folder = Shell.NameSpace(Path.GetDirectoryName(_AudioPath))
    3. Dim FolderItem As Shell32.FolderItem = Folder.ParseName(Path.GetFileName(Mp3Audiotitel))
    4. Dim Bitratesfound As String = Folder.GetDetailsOf(FolderItem, 28)
    5. Dim StringtoFind As String = " kBit/s"
    6. Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "")
    7. Dim NewBitrate As Integer = Integer.Parse(BitratesModifed)


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @seby1302 Das bekommst Du doch ganz easy selbst heraus.
    Lerne zu debuggen:
    Debuggen, Fehler finden und beseitigen
    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!
    Ja habe ich auch schon gemacht und der sagt mir falsche Format, sagte ich oben bereits.

    Auf diesem abschnitt.
    Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "") ***System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."***


    Nur bringt mir nix wenn selbst Option Strict on mir das zwar korrigiert, aber am ende immer noch die selbe Meldung kommt..

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

    Was konkret steht z.B. in Bitratesfound und BitratesModifed drin?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    in Bitratesfound Steht z.b 100 kBit/s und in BitratesModifed in der regel dann nur noch 100

    Hab erst gedacht das dort ein Leerzeichen mit drinnen war, und er sich deshalb Beschwert z.b100.. anstatt 100

    Ist aber nicht...
    P.s habe deshalb auch Bitratesfound.Replace(StringtoFind, Nothing) probiert anstelle von Bitratesfound.Replace(StringtoFind, "")

    Da im 100 kBit/s Sich ein Leerzeichen Befindet habe ich A Dim StringtoFind As String = Space(0) & "kBit/s" Bis 2 und auch Dim StringtoFind As String =" kBit/s" Also mit Lücke Vor k...
    Getestet beides bringt Nix.

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

    Steht 100 kBit/s drin, ist alles gut. Kommazahlen crashen. Auch mit anderen Einheiten crasht es. Aber im konkreten Fall, wie RfG schrieb: debuggen. Geht ganz einfach, siehe Anhang. Einfach beim Crash auf BitratesModifed mit der Maus zeigen und siehe da …
    Bilder
    • CrashResult.png

      32,37 kB, 875×324, 149 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann mach es anders:

    VB.NET-Quellcode

    1. Dim StringtoFind As String = " kBit/s"
    2. Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "")
    3. Dim NewBitrate As Integer
    4. If Not Integer.TryParse(BitratesModifed, NewBitrate) Then MessageBox.Show(BitratesModifed)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Aber jetzt die entscheidene Frage: Was wird denn angezeigt, was das Parsing nicht will?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nix nur der TextBox mit der zahl 100 wird angezeigt.

    ALLERDINGS, parst er diese als String um.
    Nicht so ganz das was ich wollte, ich wollte später diese zahl Teilen/Multiplizieren können also parsen als Integer oder Double noch besser :whistling:
    Das hatte ich ganz übersehen das der die als String parsen tut.
    Waswiewower? Ich versteh nur Bahnhof.
    Wenn das Parsing klappt, wandert der Integerwert in die Variable NewBitrate. Klappt es nicht, erscheint eine Messagebox und zeigt den nichtparsbaren Text.
    Was für ne TextBox meinst Du?
    Was meinst Du mit

    seby1302 schrieb:

    parst er diese als String um.


    Parsen = Text/String in einen bestimmten Datentyp umwandeln. Der Zieldatentyp ist dabei kein String. Denn warum sollte man einen String in einen String parsen? Ist ja schon einer.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sorry ich habe mich Vertan nochmal.

    Der Messagebox zeigt das String an.
    Then MessageBox.Show(BitratesModifed) <- ist ein String. und wird auch in der Messagebox Meldung angezeigt (100).

    Form1.TextBox2.Text = NewBitrate.ToString zeigt (0) an, das was du wohl meintest.


    Das komische ist eben DAS...

    Wenn ich es so mache klappt das ohne Problemen.

    VB.NET-Quellcode

    1. Dim BitratesModifed As String = "100"
    2. Dim NewBitrate As Integer
    3. If Not Integer.TryParse(BitratesModifed, NewBitrate) Then MessageBox.Show(BitratesModifed) 'messagebox nicht vorhanden
    4. Form1.TextBox2.Text = NewBitrate.ToString 'Textbox zeigt 100 an

    ?( das heißt der Bitratesfound.Replace Knallt da irgendetwas rein was nicht in Integer Konvertiert werden kann?!

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

    Nein, das Parsen von 100 kBit/s klappt problemlos, siehe Anhang. Du kannst aber mal das hier machen:

    VB.NET-Quellcode

    1. Dim StringtoFind As String = " kBit/s"
    2. Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "")
    3. Dim NewBitrate As Integer
    4. If Not Integer.TryParse(BitratesModifed, NewBitrate) Then MessageBox.Show(BitratesModifed & ", " & BitratesModifed.Length.ToString)


    Was kommt dabei raus?
    Bitte Screenshot per [+ Erweiterte Antwort], _|Dateianhänge|_ [Hochladen]
    Bilder
    • ParsingResult.png

      11,42 kB, 655×120, 150 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ok ich sehe grade das der aus dem Normalen String das macht auch mit dem Replace.
    aus dem Folder.GetDetailsOf(FolderItem, 28) Kommen die faxen und hat + 1 Länge

    Lol Der Forum hat mir aus dem Bild 1/4 Gemacht....

    Gibt Mir ein MessageBox (100, 3)

    VB.NET-Quellcode

    1. Dim Bitratesfound As String = Folder.GetDetailsOf(FolderItem, 28)
    2. Dim StringtoFind As String = " kBit/s"
    3. Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "")
    4. Dim NewBitrate As Integer
    5. If Not Integer.TryParse(BitratesModifed, NewBitrate) Then MessageBox.Show(BitratesModifed & ", " & BitratesModifed.Length.ToString)


    Gibt mir im Texbox denn richtigen wert 100

    VB.NET-Quellcode

    1. Dim Bitratesfound As String = "100 kBit/s"
    2. Dim StringtoFind As String = " kBit/s"
    3. Dim BitratesModifed As String = Bitratesfound.Replace(StringtoFind, "")
    4. Dim NewBitrate As Integer
    5. If Not Integer.TryParse(BitratesModifed, NewBitrate) Then MessageBox.Show(BitratesModifed & ", " & BitratesModifed.Length.ToString)
    Bilder
    • Bild_2020-12-28_233138.png

      11,23 kB, 967×109, 148 mal angesehen
    So, nach langem Hin- und Her und einfach mal selber Code aus Post#1 ausprobieren, hier des Rätsels Lösung: In der Shellfunktion steckt der "Fehler". Der Text mit der ermittelten Bitrate startet mit einem unsichtbaren Zeichen. Nutze das hier und es sollte klappen:

    VB.NET-Quellcode

    1. Dim Bitratesfound As String = Folder.GetDetailsOf(FolderItem, 28).Substring(1)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.