Programm addiert nicht, es erstellt Zahlenreien.

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Programm addiert nicht, es erstellt Zahlenreien.

    Guten Tag,
    ich versuche gerade ein Programm zu erstellen, es speichert verschiedene Werte in INI Datein und kann diese auch wieder auslesen.
    Bei dem Versuch die Daten zu sammeln bin ich auch folgendes Problem gestoßen.
    Bei einer For schleife soll das Programm aus jeder INI datei im Ordner einen Wert auslesen und diesen zusammen rechnen, jedoch wird in der Variable nur eine Zahlenkette erstellt.
    Wenn ich eine Variable vom typ Integer oder Double nehmen meckert er rum das er diese nicht konvertieren kann.
    Bei dem Datentyp String kommt kein Error jedoch bildet er einen Zeichenfolge.

    VB.NET-Quellcode

    1. For Each dateien As String In My.Computer.FileSystem.GetFiles("C:\***\Ordner\")
    2. dateien = dateien.Replace("C:\***\Ordner\", Nothing)
    3. INI.Pfad = "C:\***\Ordner\" & dateien
    4. gesamtslots = gesamtslots + INI.WertLesen("***", "***", "")
    5. Next
    @TheKeram007: Dein Programm arbeitet völlig korrekt.
    Du liest einen String aus und verkettest ihn mit einem anderen String.
    Wenn Du einen Integer-Wert auslesen willst, musst Du eine Prozedur nehmen, die Integer-Werte zurück liefert, vielleicht heißt die bei Dir INI.IntWertLesen(...) oder so
    oder
    Du konvertierst zunächst den gelesenen String mit Integer.Parse(text) oder Integer.TryParse(text, IntValue) in ein Integer um, das kannst Du dann addieren.
    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!
    Erstmal vielen Dank für die schnelle Antwort :)

    Nun weiß ich nicht genau wie ich es anwenden soll.
    Habe es folgender maßen versucht, da ich soweit wie ich es verstehe glaube das die Funktion INI.WertLesen einen String ausgibt, da ich eine Prozedur am String anwenden soll habe ich es folgender maßen geschrieben:
    Erstmal habe ich den Typ von gesamtslots auf Integer geändert.
    Nun habe ich die betroffene Zeile in welcher der String ausgelesen wird die Prozedur angewendet, jedoch ohne erfolg.
    Wo liegt mein Denkfehler? :huh:

    VB.NET-Quellcode

    1. gesamtslots = gesamtslots + Integer.Parse(INI.WertLesen("***", "***", ""))
    @TheKeram007:
    Mach Dir einen (temporären) Button auf Deiner Oberfläche, in dessen Klick-Routine Du genau diesen Effekt untersuchst und nix anderes.
    Etwa so:

    VB.NET-Quellcode

    1. Dim txt = INI.WertLesen("***", "***", "")
    2. MessageBox.Show(txt)
    3. Dim i = Integer.Parse(txt)
    4. MessageBox.Show(i.ToString)
    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 die Variante

    VB.NET-Quellcode

    1. Dim txt = INI.WertLesen("***", "***", "")
    2. MessageBox.Show(txt)
    3. Dim i = Integer.Parse(txt)
    4. MessageBox.Show(i.ToString)


    Funktioniert auf einen Button ohne Probleme, aber irgendwie nicht in der Schleife :/


    Die Fehlermeldung lautet:
    Eine nicht behandelte Ausnahme des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Die Eingabezeichenfolge hat das falsche Format.
    Da du das Ganze in ner Schleife hast, würd ich sagen, er findet anhand deiner Eingaben einen Wert, der eben keine Zahl ist.
    ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    TheKeram007 schrieb:

    aber irgendwie nicht in der Schleife
    Dann mach in Deiner Schleife zunächst eine Ausgabe und ein Integer.TryParse rein.
    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!
    Ich würde ja einfach beim Debuggen mal schauen was in deiner "txt" Variable zum Zeitpunkt des Fehlers so drinne steht.
    Da muss man ja nicht raten. Das kann man ja einfach nachschauen ob da ne Zahl oder nen Text steht.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. Dim i As Integer
    2. Integer.TryParse("1", i)


    Oder erweitert:

    VB.NET-Quellcode

    1. Dim fehler As Boolean
    2. Dim i As Integer
    3. fehler = not Integer.TryParse("1", i)
    4. If fehler then MessageBox.Show("Der Wert konnte nicht in einen Integer umgewandelt werden")
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    TheKeram007 schrieb:

    Ich bin mir zu 100% sicher das dort kein Text drinne steht.
    Ich wette dagegen.
    Kann es sein, dass da Dezimalstellen mit Punkt als Separator drin stehen?
    Poste mal die INI-Datei.

    TheKeram007 schrieb:

    Integer.TryParse
    Gugst Du hier.
    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. Dim i As Integer
    2. For Each dateien As String In My.Computer.FileSystem.GetFiles("C:\***\Ordner\")
    3. dateien = dateien.Replace("C:\***\Ordner\", Nothing)
    4. INI.Pfad = "C:\***\Ordner\" & dateien
    5. If Integer.TryParse(INI.WertLesen("***", "***", ""), i) then
    6. gesamtslots += i
    7. Else
    8. MessageBox.Show(String.Concat("Der Wert ", INI.WertLesen("***", "***", ""), " konnte nicht konvertiert werden."))
    9. End If
    10. Next


    Ich bin mir gerade nicht 100%ig sicher ob ein Erfolg nen True oder False zurückgibt. Müsste dir die IDE aber sagen. Je nachdem die If-Else drehen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Vielleicht eine Blöde Frage... Aber du hast durch das Lesen da nicht noch das "=" mit drin, oder?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D