Werte splitten und gewissen Prozentsatz aufrechenen

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Gottric.

    Werte splitten und gewissen Prozentsatz aufrechenen

    Hallo,
    bin dann doch wesentlich früher als gedacht am Ende mit meinem können.
    Es geht um folgendes, ich habe eine Maske auf der 6 textboxen nebeneinander 4x untereinander aufgelistet werden.Dort lade ich Parameter einer Datenbank rein.
    Typische Datenbank sieht so aus:

    900 180.00 200.0 290.0 0.00 0.00
    900 0.0 0.0 0.0 0.00 0.00
    900 250.0 250.0 290.0 0.00 0.00
    900 250.0 250.0 290.0 0.00 0.00
    900 40.00 60.0 60.0 0.00 0.00
    900 40.0 60.0 60.0 0.00 0.00
    900 40.0 60.0 60.0 0.00 0.00

    Die Datenbank sieht aber auch in 2 Texfelden klassisch so aus:

    NameSet1 = default set name
    NameSet2 = default set name
    NameSet3 = default set name
    ;--------------------------------------------------------
    Code = 0
    Info = Converted from dbk_8888 to 8888.dbk
    Modify = 2016-05-15
    byUser =
    Reason = Conversion 1. rob generation to 2. generation
    LastRun = -
    Caption = Speed Flow PattAr AtomAr Rotat. Hi-Vot
    Set1 = 600 300.00 140.00 220.00 0.000 0.000
    Set2 = 600 150.00 180.00 220.00 0.000 0.000
    Set3 = 600 00.00 0.00 0.00 0.000 0.000

    nun möchte ich ein Offset auf den 2. Wert(Flow Rate) in der Datenbank geben, aber nur sofern dieser Wert nicht Null ist. Ich möchte ein Textfeld haben in dem ich die gewünschte Prozentzahl eingebe und dann soll er bitte diese auf den Wert in der Aktuellen Datenbank draufrechenen und runden, dies dann in die Textbox schreiben sodass ich das abspeichern kann. Dafür habe ich mit hilfe des Forums schon die Vorarbeit geleistet, also wie es funktioniert mit dem Runden wie ich das möchte.

    VB.NET-Quellcode

    1. txtGrundwert.Text = Replace(txtGrundwert.Text, ".", ",")
    2. Dim percent As Integer = CInt(txtPercent.Text)
    3. Dim grundwert As Integer = CInt(txtGrundwert.Text)
    4. Dim ergebnis As Integer = CInt(grundwert * (percent / 100))
    5. Dim offset As Integer = ergebnis + grundwert
    6. txtErgebnis.Text = CType(offset, String)
    7. Dim betrag As Double = CDbl(txtErgebnis.Text)
    8. txtgerundet.Text = CType(10 * Math.Round(betrag / 10, 0), String)
    9. Dim mitoffset As Double = CDbl(txtgerundet.Text)
    10. txtgerundet.Text = String.Format("{0:F2}", mitoffset)
    11. txtgerundet.Text = Replace(txtgerundet.Text, ",", ".")


    Ich denke ich muss bestimmt splitten nach einem leerzeichen bei der Datenbankvariante 1, aber die Anzahl der Leerzeichen kann unterschiedlich sein. Das ist Problem Nummer 1
    Und Problem Nummer 2 ist dass ich bei der Datenbankvariante 2 überhaupt nicht weis wie ich das bewerkstelligen soll.

    Habt ihr ne Idee?
    Ist es am besten eine Funktion für das Runden zu schreiben, wenn ja, wie gestalte ich diese am besten?

    Wäre froh wenn Ihr mir helfen könntet.

    Edit:
    Ich habe mal versucht ne Funktion draus zu bauen, die klappt auch, aber wie verschachtele ich denn den txtgrundwert.text, den ich ja selbst eingegeben habe hier, was ja später der 2. wert der Datenbank sein soll in die Funktion rein. oder hab ich da nen denkfehler?

    VB.NET-Quellcode

    1. Private Function offsetgeben(txt As String) As String
    2. Dim Wert = txtGrundwert.Text
    3. Replace(Wert, ".", ",")
    4. Dim percent As Integer = CInt(txtPercent.Text)
    5. Dim grundwert As Integer = CInt(Wert)
    6. Dim ergebnis As Integer = CInt(grundwert * (percent / 100))
    7. Dim offset As Integer = ergebnis + grundwert
    8. Dim Ergebniswert = CType(offset, String)
    9. Dim betrag As Double = CDbl(Ergebniswert)
    10. Dim fertiggerundet = CType(10 * Math.Round(betrag / 10, 0), String)
    11. Dim mitoffset As Double = CDbl(fertiggerundet)
    12. fertiggerundet = String.Format("{0:F2}", mitoffset)
    13. fertiggerundet = Replace(fertiggerundet, ",", ".")
    14. Return fertiggerundet
    15. End Function

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

    Mein Problem ist ich verstehe nicht, was du sagst.

    Gottric schrieb:

    Die Datenbank sieht aber auch in 2 Texfelden klassisch so aus...
    Wie kann eine Datenbank in 2 Textfeldern klassisch aussehen?
    nun möchte ich ein Offset auf den 2. Wert(Flow Rate) in der Datenbank geben, aber nur sofern dieser Wert nicht Null ist.
    Ein Offset auf den 2. Wert geben? Ich geb dir auch gleich Offset! ;)

    Ich möchte ein Textfeld haben in dem ich die gewünschte Prozentzahl eingebe und dann soll er bitte diese auf den Wert in der Aktuellen Datenbank draufrechenen und runden, dies dann in die Textbox schreiben sodass ich das abspeichern kann.
    und dann soll er den Wert in der Datenbank draufrechnen??
    Na, so weit erstmal - ich breche hier ab.
    schon richtig geschrieben so!
    ich habe eine Maske auf der 6 textboxen nebeneinander 4x untereinander aufgelistet werden

    typisch, also in der mehrzahl der Texfelder sehen die Datenbanken es so aus wie oben im ersten Datenbankblock gepostet.
    aber in 2 von den Textfeldern auf der Maske sieht die Datenbank die ich reinlade halt so aus wie ich sie im zweiten Datenbankblock gepostet habe.
    und dass man aufrechenen eines Wertes Offset nennt hab ich mir ja nicht ausgedacht, kann dem Kind aber auch geren nen anderen Namen geben.
    Ich formuliere es auch gerne anders. Ich meine damit dass ich auf den 2. wert in dem eingeladenen Datenbankblock, welcher die Flowrate angibt, gerne eine Prozentzahl die sich ich in einer Textbox auf der Maske eintragen kann aufrechne.

    Wenn ich mich nochwo unverständlich ausgedrückt habe tut mir das Leid, einfach sagen und ich versuche es dann verständlicher zu formulieren.
    Hoffe auf eure Hilfe

    Edit:
    Durch einiges suchen und herrumprobieren habe ich herrausbekommen wie ich in einer Textbox immergenau den wert angezeigt bekomme auf den ich den Prozentsatz aufrechnen will
    hier der Code:

    VB.NET-Quellcode

    1. Dim Lines() As String = txt2.Text.Split(Environment.NewLine.ToCharArray, System.StringSplitOptions.RemoveEmptyEntries)
    2. For Each line In lines
    3. Dim parts() As String = line.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
    4. MsgBox(parts(1).ToString)
    5. Next

    funktioniert aber nur bei dem ersten Datenbankblock den ich gepostet habe.
    ich versuche mich weiter...

    also meine weiteren Versuche blieben erfolglos.
    hat keiner ne Idee wie ich meine Aufgabenstellung realisieren kann?

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