Variable aufsplitten und Zahl (als String) zu double konvertieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Variable aufsplitten und Zahl (als String) zu double konvertieren

    Hi,

    ich habe momentan folgendes (für mich rätselhafte) Problem. Und zwar habe ich eine String-Variable mit verschiedenen Werte und Zahlen, die in eine Liste (ListOfString) aufgesplittet werden. Das klappt wunderbar. Wenn ich aber die Zahlen darin auslesen will, die in jeder 2ter stelle sind, gibt es Probleme/Errors: System.FormatException: Die Eingabezeichenfolge hat das falsche Format.

    VB.NET-Quellcode

    1. Function GetAvaibleVersion() As String
    2. Try
    3. Dim client As WebClient = New WebClient()
    4. Dim filelist As String = (client.DownloadString(Server & "Files.txt"))
    5. ModList = New List(Of String)(filelist.Split("|"))
    6. Dim version As Double = Nothing
    7. For i As Integer = 1 To (ModList.Count / 2)
    8. version += Double.Parse(ModList.Item((i * 2) - 1).ToString)
    9. Next
    10. version /= (ModList.Count / 2)
    11. Return version.ToString
    12. Catch ex As Exception
    13. ex.ToExceptionless().Submit()
    14. Return "error#1"
    15. End Try
    16. End Function

    Die Datei/Werte die ich herunterlade sehen z.B. so aus: name1|0.1|name2|0.5|name3|1.75 usw.
    nun möchte ich jeden zweiten Wert (also die Zahlen) in "Double" konverten und zusammenrechnen. Und da passiert mir der Fehler. Jedoch sehe/finde ich ihn nicht. Könntet ihr mir dabei helfen?

    Mfg & Thx

    ~gfc
    Vielen Dank, so funktioniert es wunderbar. Aber warum muss man CultureInfo noch mitdazugeben 8|

    Verstehe ich nicht ganz.

    ~gfc
    Ach so... Wusste nicht mal das es Länder gibt, die das Unterscheiden...
    Darauf wäre ich also wirklich nie gekommen ^^

    Noch so eine Frage nebenbei (es geht auch um list-ofstrings):
    Ich habe 2 Variablen (List(OfString)) die ich miteinander Vergleiche (Variable A und Z). Wenn in A ein Wert anders ist als in Z kann ich dies schon gut abvergleichen (über For-Next).
    Aber wie kann ich feststellen das in A überhaupt keine oder nicht gleich viele Werte drin sind wie in Z ohne das ich eine Exception bekomme? Denn A hätte z.B. nur 6 Werte während Z 10 hat. Wenn der Pointer auf 7 gehen würde, würde ich doch bei A eine Exception bekommen.

    Meine Frage ist, wie ich auch dass erkennen kann und "nachtragen" kann, ohne mit grossen if/then ketten, die die Länge der Variablen überprüfen...
    (Das habe ich schon)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function SelectModsToUpdate() As List(Of String)
    2. Dim modstring As List(Of String) = Nothing
    3. For i As Integer = 0 To CInt((NewModList.Count / 2))
    4. If Not NewModList.Item(i * 2).ToString = InstModList.Item(i * 2).ToString Or Not NewModList.Item((i * 2) + 1).ToString = InstModList.Item((i * 2) + 1).ToString Then
    5. modstring.Add(Server & NewModList.Item(i * 2).ToString)
    6. End If
    7. Next
    8. Return modstring
    9. End Function


    Mein Ziel wäre es die Differenz zurückzugeben. (Will keinen Code, sondern nur die Überlegung wie man es umsetzten könnte)

    ~gfc

    gfcwfzkm schrieb:

    VB.NET-Quellcode

    1. (ModList.Count / 2)
    Option Strict On.
    Integerdivision funktioniert mit einem BackSlash:

    VB.NET-Quellcode

    1. (ModList.Count \ 2)


    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!
    @thunderbold: ups! ;)

    @gfzxydingsbums: sowas nenne ich eine Differenz-Analyse, und hab ich leider nur fertigen Code für.

    VB.NET-Quellcode

    1. <Extension()> _
    2. Public Function DifferenceAnalize(Of T)(lst1 As IEnumerable(Of T), lst2 As IEnumerable(Of T)) As DifferenceResult(Of T)
    3. With DifferenceAnalize
    4. .List1_Only = New HashSet(Of T)(lst1)
    5. .List2_Only = New HashSet(Of T)()
    6. .Commons = New HashSet(Of T)
    7. Dim hsh = New HashSet(Of T)(lst1)
    8. For Each itm In lst2
    9. Call If(hsh.Add(itm), .List2_Only, .Commons).Add(itm)
    10. Next
    11. .List1_Only.ExceptWith(.Commons)
    12. End With
    13. End Function
    14. Public Structure DifferenceResult(Of T)
    15. Public List1_Only As HashSet(Of T)
    16. Public List2_Only As HashSet(Of T)
    17. Public Commons As HashSet(Of T)
    18. End Structure

    'Usage

    VB.NET-Quellcode

    1. Dim lst1 = "Hallo hat hier jemand was verloren".Split
    2. Dim lst2 = "Nein, von uns hat niemand was verloren".Split
    3. With lst1.DifferenceAnalize(lst2)
    4. MessageBox.Show( _
    5. String.Join(Environment.NewLine, .List1_Only), "List1_Only")
    6. MessageBox.Show( _
    7. String.Join(Environment.NewLine, .List2_Only), "List2_Only")
    8. MessageBox.Show( _
    9. String.Join(Environment.NewLine, .Commons), "Commons")
    10. End With

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()