Fehler bei Konvertierung von String in Single

  • VB.NET

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

    Fehler bei Konvertierung von String in Single

    Hi @all

    Ich möchte mehrere Zahlen aus einer Datei auslesen und in eine List(Of Single) einlesen.

    Ich mache das so:

    VB.NET-Quellcode

    1. Dim sng As New List(Of Single)
    2. For Each zeile As String In source.Split(CChar(vbNewLine))
    3. Dim arr() As String
    4. arr = source.Split(CChar("|"))
    5. For Each str As String In arr
    6. sng.Add(CType(str, Single))
    7. Next
    8. Next


    Bei sng.Add(CType(str, Single) kommt ein Error: Die Zeichenfolge 0 lässt sich nicht in Single konvertieren.
    Single.Parse(str) bringt den gleichen Fehler.


    Weiß jemand von euch wo der Fehler liegt?
    Wozu gehtst du alle Zeilen druch? Willst du nicht lieber die aktuelle Zeile bei dem Pipe-Symbol splitten? Andernfalls bräuchten wir hier ne Erklärung, was das sein soll.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Lukas

    In der Textdatei ist ein Effekt-Preset gespeichert für Bilder.
    Das Preset liegt als Single vor und wird am Pipe-Symbol aufgesplittet und in das Array eingelesen.

    Dann werden die Zahlen in eine ColorMatrix als zweidimensionales SingleArray eingelesen. Und zwar so:

    VB.NET-Quellcode

    1. Return New Single()() { _
    2. New Single() {sng(0), sng(1), sng(2), sng(3), sng(4)}, _
    3. New Single() {sng(5), sng(6), sng(7), sng(8), sng(9)}, _
    4. New Single() {sng(10), sng(11), sng(12), sng(13), sng(14)}, _
    5. New Single() {sng(15), sng(16), sng(17), sng(18), sng(19)}, _
    6. New Single() {sng(20), sng(21), sng(22), sng(23), sng(24)}}


    In der Datei für den Sepia-Effekt steht dann z.B.:

    Quellcode

    1. 0|0.8F|0|0|0
    2. 0.588F|0.588F|0.588F|0|0
    3. 0|0|0|0|0
    4. 0.5F|0|0|0.5F|1
    5. 0|0|0|0.1F|1


    Also 5 Zeilen mit jeweils 5 Zahlen.
    Und die lassen sich nicht einlesen.

    VB.NET-Quellcode

    1. arr = zeile.Split(CChar("|"))


    Solltest du dann nicht eher jede Zeile durchgehen und diese splitten?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    MarcoQuinten schrieb:

    Und die lassen sich nicht einlesen.
    Doch, lassen sie.
    Aber sie haben es leicht in sich.
    1. wollen sie kein angehängtes "F" haben,
    2. sind sie englisch / amerikanisch notiert mit Dezimalpunkt.
    So geht es:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private arr(4, 4) As Single
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Dim culture = New System.Globalization.CultureInfo("en-US")
    4. Dim lines() As String = System.IO.File.ReadAllLines("C:\Temp\Test\new.txt")
    5. For i1 As Integer = 0 To 4
    6. Dim parts() As String = lines(i1).Split("|"c)
    7. For i2 As Integer = 0 To 4
    8. If parts(i2).EndsWith("F"c) Then
    9. parts(i2) = parts(i2).Substring(0, parts(i2).Length - 1)
    10. End If
    11. arr(i1, i2) = Single.Parse(parts(i2), culture)
    12. Next
    13. Next
    14. End Sub
    Bilder
    • Single.jpg

      62,05 kB, 497×668, 236 mal angesehen
    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!