Announcement

Collapse
No announcement yet.

Komma als Variablentrennzeichen

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Komma als Variablentrennzeichen

    Hallo!
    Ich bins wiedermal!
    Hoffentlich kann und will mir wer dabei helfen - würde mich sehr darüber freuen:
    Ich verwende Numericupdown controls die darin befindlichen Werte sollen beim Klick auf den Button "Speichern" in eine Textdatei abgespeichert werden, dies geschieht folgendermassen:


    Code:
    Dim fileno As Integer, filename As String
            fileno = FreeFile()
            FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
            PrintLine(fileno, Numericupdown1.Text)

    Beim nächsten Start meines tools sollen diese Werte aus der Textdatei wieder geholt werden und in die betrefende Numericupdown eingefügt. Das geht so:



    Code:
    Dim fileno As Integer, filename As String
                    fileno = FreeFile()
                    FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\" & "\" & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt", OpenMode.Input, OpenAccess.Read, OpenShare.LockRead)
    
                    Input(fileno, Numericupdown1.Text)
    Das Funktioniert eigentlich recht gut! aber ein Problem hab ich jetzt entdeckt:
    Sobald der Wert in der Numericupdown Dezimalstellen aufweist (zB.: 8,5) wird der Wert nicht mehr Richtig geladen - ich denke das liegt daran weil VB das Komma als Variablentrennzeichen verwendet.
    Hatt jemand eine Idee wie ich dieses Problem lösen kann?

  • #2
    Bei den von mir dringendst empfohlenen Methoden der File-Klasse gibt es jeweils eine Überladung, bei der mit einem Encoding-Parameter angegeben werden kann, wie länderspezifische Zeichen verarbeitet werden sollen. Bei den "einfachen" VB-Methoden fehlen solche Möglichkeiten.

    Du würdest dir das Leben wirklich erleichtern, wenn du deinen Blick auf andere Wege erweitern würdest.

    Jürgen

    Comment


    • #3
      Hi

      Du meinst die "File.WriteAllText" Methode? Wenn ja dan kann ich dich beruhigen - ich habe endlich auf dich gehört und umgestellt
      hier der gesammt Code zum Abspeichern:

      Dim path As String = TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt"

      ' This text is added only once to the file.
      If File.Exists(Path) = False Then
      Dim createText As String = TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt"
      File.WriteAllText(Path, createText)
      End If
      Dim fileno As Integer, filename As String
      fileno = FreeFile()
      FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
      PrintLine(fileno, TextBox1.Text)
      Aber wie gehe ich jetzt weiter?
      geladen wird nach wie vor so:
      Dim fileno As Integer, filename As String


      fileno = FreeFile()
      FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\" & "\" & ListBox1.Text & ".txt", OpenMode.Input, OpenAccess.Read, OpenShare.LockRead)
      Input(fileno, TextBox1.Text)
      muss ich da auch was ändern?
      Danke für deine nette Unterstützung
      und danke im vorraus für weitere Hilfe
      Kann es sein das ich beim laden so meinem Problem ein stückchen näher bin?:
      Dim FileNumber As Integer
      Dim Value As Decimal

      Dim fileno As Integer, filename As String
      fileno = FreeFile()


      FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt", OpenMode.Input, OpenAccess.Read, OpenShare.LockRead)
      FileSystem.Input(FileNumber, Value = NumericUpDown48.Text)
      End Sub
      wenn ja! Was mach ich noch falsch?

      Gruß Jürgen
      Zuletzt editiert von vierkant; 18.10.2009, 11:03.

      Comment


      • #4
        Aber wie gehe ich jetzt weiter?
        geladen wird nach wie vor so:
        Was macht File.WriteAllText? Genau, es wird Text auf die Festplatte geschrieben. Wie könnte dann das Gegenstück zum "Laden" von Text heißen?

        Das Ergebnis des Einlesens wird einfach der Eigenschaft TextBox1.Text zugewiesen. Aber du musst das "Zuweisen" an der richtigen Stelle und richtig (links/rechts beachten) machen.

        Jürgen

        PS. Code sollte nicht als Zitat dastehen, sondern als Code - entweder mit highlight=vbnet oder wenigstens mit dem #-Button als allgemeiner Code markiert.

        PS2. Wann änderst du eigentlich deine Namen wie TextBox348?

        Comment


        • #5
          na readalltext! Aber wie setze ich es wo ein?
          zu PS2: Die Namen werden geändert wenn dieses Problem erledigt ist (Schritt für Schritt) Aber ich werde es tun!

          Gruß Jürgen

          Comment


          • #6
            Das geht in einer Zeile:
            Code:
            TextBox1.Text = File.ReadAllText(filename)
            Bei NumericUpDown wird es etwas komplizierter, weil Text dort eigentlich nicht zur Verfügung steht (2 bis 3 Zeilen)
            Code:
            Dim content As String
            content = File.ReadAllText(filename)
            NumericUpDown48.Value = double.Parse(content)
            Noch besser wäre double.TryParse, aber dazu muss man wissen, wie if in VB geschrieben wird (also ich nicht).

            Jürgen

            Comment


            • #7
              Also ich verzweifle noch! Nach Tagelanger Probiererei und sucherei: Deine Variante geht leider nicht! Jetzt habe ich weiter gesucht und folgendes Probiert:

              Private Function GetItemText(ByRef strBuffer) As String
              Dim temp As String
              Dim strValue As String
              Dim iLen As Integer

              strValue = ""
              If strBuffer.Length() >= 5 Then
              temp = Microsoft.VisualBasic.Left(strBuffer, 5)
              iLen = Convert.ToInt32(temp)
              strBuffer = strBuffer.Remove(0, 5)
              strValue = Microsoft.VisualBasic.Left(strBuffer, iLen)

              End If

              Return strValue
              End Function
              Speichern:
              Dim path As String = TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt"

              ' This text is added only once to the file.
              If File.Exists(path) = False Then
              Dim createText As String = TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt"
              File.WriteAllText(path, createText)
              End If
              Dim fs As FileStream = File.OpenWrite(TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt")

              Dim sw As New StreamWriter(fs)
              ' Jänner

              sw.Write(Format(Len(NumericUpDown43.Text), "00000") & NumericUpDown43.Text)
              sw.Write(Format(Len(NumericUpDown54.Text), "00000") & NumericUpDown54.Text)
              sw.Close()
              und wieder laden:
              Dim fs As FileStream = File.OpenRead(TextBox13.Text & ComboBox1.Text & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt")
              Dim sr As New StreamReader(fs)
              Dim strBuffer As String
              strBuffer = sr.ReadToEnd()
              sr.Close()

              ' Jänner

              NumericUpDown43.Text = GetItemText(strBuffer)
              NumericUpDown54.Text = GetItemText(strBuffer)
              Habe ich nur eine Numericbox funktioniert das Tadellos!
              Aber sobald ich wie im oben angeführten Beispiel 2 und mehr Numericboxen habe kommt wenn ich die Daten wieder laden möchte beim debugen
              folgender Fehler:
              iLen = Convert.ToInt32(temp)
              "Die Eingabezeichenfolge hat das falsche Format."
              Was mach ich den jetzt schon wieder falsch?
              Ich bitte inständig um Hilfe
              Gruß Jürgen
              Zuletzt editiert von gfoidl; 21.10.2009, 19:20. Reason: Das schreckliche Gelb in Rot umgewandelt und eine Box drübergelegt da vierkant das alles egal zu sein scheint wenn er das Helfen erleichtern kann.

              Comment


              • #8
                Was mach ich den jetzt schon wieder falsch?
                Keine Ahnung, weil ich deinen Text schon wieder nicht lesen kann (und er keinerlei Einrückungen anzeigt):
                Originally posted by Jürgen Thomas View Post
                PS. Code sollte nicht als Zitat dastehen, sondern als Code - entweder mit highlight=vbnet oder wenigstens mit dem #-Button als allgemeiner Code markiert.
                Und gelb auf weiß wie bei der Fehlermeldung ist schon gar nicht zu lesen. Hast du bemerkt, dass es auch den "Vorschau"-Button? Damit kannst du deinen Beitrag erst einmal kontrollieren und ändern, bevor er mit "Antworten" abgeschickt wird.

                Jürgen

                Comment


                • #9
                  Sorry
                  Was kannst ned lesen?
                  Okay hier mal die Fehlermeldung:
                  "iLen = Convert.ToInt32(temp)" wird beim debugen gelb markiert

                  Comment


                  • #10
                    Hallo vierkant,

                    eigentlich sollte von dir erwartet werden können dass du weißt wie Beiträge zu verfassen sind. Es ist nur in deinem Interesse die Fragen so zu stellen und zu formatieren dass dem der helfen will es so einfach wie nur möglich gemacht wird. Aber darauf scheinst du keinen Wert zu legen.

                    Zum anderen ist alles relevante schon erwähnt worden. Trivial-Fehler selbst zu lösen gehört zum Muss eines Programmierers. Dass ein Blick in die MSDN dazu gehört sollte sich von selbst erklären.

                    Einfach nur Kopieren hat mit Programmierung nichts zu tun. Also bitte versuche etwas selbständiger zu arbeiten. Sollte das nicht möglich sein hast du eventuell falsche Interessen oder den falschen Beruf.

                    Wie bereits erwähnt wurde alles wesentliche für die Lösung deines Problems von Jürgen Thomas bereits erwähnt und daher sehe ich keinen Grund warum dieses Thema weiter offen bleiben sollte. Zumal du der wiederhohlten Aufforderung von Jürgen Thomas deine Beiträge zu formatieren nicht nachkommen willst.


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment

                    Working...
                    X