kostenloser Webspace werbefrei: lima-city


Variabeln Replacen

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich bastel mir derzeit ein kleines Programm um meine Arbeitstag/stunden">stunden auszurechnen.

    Der aufbau ist relativ einfach gehalten.
    31 Textboxen - 31 Variabeln.


    Nun stoße ich auf ein Problem , auf der Stempelkarte ist die Uhrzeit in Dezimalzahlen geschrieben und das soll natürlich voher umgewandelt werden.

    Es kommen nur folgende Dezimalzahlen vor:
    :00
    :05
    :10
    :15
    :20
    :25
    :30
    :35
    :40
    :45
    :50
    :55
    :60
    :65
    :70
    :75
    :80
    :85
    :90
    :95


    Vor dem Doppelpunkt steht jeweils die Stunde Beispielsweise jetzt 12:35.

    nun muss alles nach dem Doppelpunkt ausgetauscht werden.

    05 ->3
    10 ->6 usw.

    Doch wie mache ich das? :)

    Variabel Typ ist String

    LG



    Beitrag zuletzt geändert: 12.1.2014 22:11:28 von marvinkleinmusic
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 1. Warum nicht einfach ausrechnen? Dafür musst du natürlich den String los werden. ;) Schau doch mal, ob es da ein Konstrukt deiner Sprache gibt oder du die Zahlen auch als Integer bekommen kannst.

    2. Regex wäre zwar aufwändig, könnte aber auch helfen.
  4. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Wie ist denn das genau Format? Werden die Stunden auch immer durch zwei Zeichen repräsentiert, also 6:00 Uhr, oder 06:00 Uhr? Das wäre nämlich interessant für die Verwendung in Left$ zur Ermittlung der Anzahl in Stunden. DIe Minuten jedenfalls würdest du über Right$ herausbekommen als String:
    http://www.vbarchiv.net/workshop/workshop_27-left-right-und-mid-funktion-ganz-neu-und-mit-klasse.html
    Anschließend könntest du den String in eine Zahl umwandeln:
    http://stackoverflow.com/questions/7708838/how-do-i-convert-from-a-string-to-an-integer-in-visual-basic
    und damit in Stunden umrechnen, indem du durch 100 dividierst und mit 60 mutliplizierst.
    Hättest du also den Text "6:50" aus der Stempelkarte (was für 6:30 Uhr steht) würdest du die 50 bekommen, durch 100 x 60 = 30.
  5. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo ihr zwei! :)


    Ersteinmal danke für eure Hilfe !:)

    Ersteinmal so sieht derzeit der Umrechner aus und die Zahlen müssen in diesem Format so eingegeben werden.

    http://s7.directupload.net/images/140113/aqjl2uqk.png

    Wie man sehen kann habe ich den Rechner ein wenig Verändert sodass wir jetzt Insgesammt auf 31 x 4 Textboxen kommen. (Kommt - Geht Zur Pause - Wieder da - Feierabend.


    Nun stoße ich auf 2 Probleme.

    Das erste betrifft ja das Replacen sprich (@burgi dieser Artikel ist eine Große Hilfe , ebenso wie das /100x60 (Y) ).

    Doch wie kann ich jetzt genau Auf den ersten Wert zugreifen und wie auf den zweiten Muss ich die jeweils in einer Variabel abspeichern oder geht das irgendwie einfacher?

    Das zweite Problem besteht dadraus , das er der Umrechner auch ein Ergebnis ausgeben soll , doch ich weis nicht genau wie ich an dieses kommen kann.

    Beispielsweise jetzt die ersten zwei Werte von Tag 1 sind jetzt:

    Gekommen 06:45 ---> Umgerechnet 06:27 Uhr
    Gegangen 14:05 ---> Umgerechnet 14:03 Uhr -->Macht 07:36 Stunden

    Wie komme ich jetzt auf die Stunden und Minuten Zeitspanne , von der Zeit wie lange ich da war?

    Es sind jeweils immer 4 Textboxen für einen Tag da.

    LG


    Beitrag zuletzt geändert: 13.1.2014 15:02:36 von marvinkleinmusic
  6. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Also ich würde das so lösen:
    Ich habe kurz einen Teil deines Programms nachgebastelt:
    http://burgi.lima-city.de/forum/formular.png
    Der Code für den Klick auf Button1 wäre in dem Beispiel dann dieser hier:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Dauer1 As Integer
            Dim Dauer2 As Integer
            Dim Anfang, Ende
            Dim Dauer As Integer
            Dim Dauer_Stunden As Integer
            Dim Dauer_Stunden_Str As String
            Dim Dauer_Minuten As Integer
            Dim Dauer_Minuten_Str As String
            'ANFANG
            'Stunden Anfang, WICHTIG: Stunden zweistellig!!
            Dauer1 = Convert.ToInt32(Microsoft.VisualBasic.Left(TextBox1.Text, 2))
            'Minuten Anfang, WICHTIG: Minuten zweistellig!!
            Dauer2 = Convert.ToInt32(Microsoft.VisualBasic.Right(TextBox1.Text, 2))
            'Anfang in Minuten umgerechnet
            'Annahme ist, dass die Minuten in Dezimal angegeben sind, und erst umgerechnet werden müssen:
            Anfang = Dauer1 * 60 + Dauer2 / 100 * 60
            'ENDE
            'Stunden Anfang, WICHTIG: Stunden zweistellig!!
            Dauer1 = Convert.ToInt32(Microsoft.VisualBasic.Left(TextBox2.Text, 2))
            'Minuten Anfang, WICHTIG: Minuten zweistellig!!
            Dauer2 = Convert.ToInt32(Microsoft.VisualBasic.Right(TextBox2.Text, 2))
            'Ende in Minuten umgerechnet
            'Annahme ist, dass die Minuten in Dezimal angegeben sind, und erst umgerechnet werden müssen:
            Ende = Dauer1 * 60 + Dauer2 / 100 * 60
            'Dauer vormittag in Minuten
            Dauer = Ende - Anfang
            Dauer_Stunden = Dauer \ 60 'ganzzahlige Division
            If Dauer_Stunden < 10 Then
                Dauer_Stunden_Str = "0" & Convert.ToString(Dauer_Stunden)
            Else
                Dauer_Stunden_Str = Convert.ToString(Dauer_Stunden)
            End If
            Dauer_Minuten = Dauer - Dauer_Stunden * 60
            If Dauer_Minuten < 10 Then
                Dauer_Minuten_Str = "0" & Convert.ToString(Dauer_Minuten)
            Else
                Dauer_Minuten_Str = Convert.ToString(Dauer_Minuten)
            End If
            TextBox5.Text = Convert.ToString(Dauer_Stunden_Str) & ":" & Convert.ToString(Dauer_Minuten_Str)
        End Sub

    Der Code ist absichtlich mit vielen Zwischenschritten, um es für dich verständlich zu halten. Du kannst ja dann Schritte zusammenfassen!
    Du musst natürlich auch die Ergebnisse (Dauer) nicht anzeigen, du kannst das auch in Variablen speichern. Aber so ist es einfacher nachzuvollziehen, und man sieht sofort, ob das Ergebnis stimmt.
  7. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo nochmal!

    Das ist ja Spitze!

    Besonders die Gründliche Kommentierung hat mir sehr weitergeholfen!

    Jetzt kommt nur die Frage Wie ich das am Einfachsten für jeden Tag hinbekomme Da ja jeder Tag 4 Kästchen hat bräuchte ich dann ja 4 * 2 Variabeln Pro Tag das ganze mal 31 --->248 Variabeln.


    Kann man dies noch einfacher Regeln?

    LG
  8. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Kann man dies noch einfacher Regeln?

    LG

    Logisch: Schreib dir eine Funktion BerechneDauer, welcher du die Inhalte der beiden Textboxen Anfang und Ende übergibst, und der Rückgabewert ist die Dauer. Das wäre die einfachste Lösung meiner Meinung nach, weil dann hast du nur die Variablen in der Funktion, und auch nur einmal, und die wird immer wieder aufgerufen :thumb:
  9. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo nochmal,

    Ich bin ein absoluter Noob bezüglich Visual Basic.

    Wie soll soeine Funktion denn aussehen?

    und gibt es auch eine möglichkeit nur mit dieser Einen Funktion , auch die Werte für Tag 2-31 Ebenfalls zuberechnen?
    (Da kommt dann wieder das problem das Leere Felder als 00:00 gezählt werden müssen)

    Wenn du mir vielleicht noch zeigen könntest wie man 2 Tage sehr Simple mit Hilfe einer Funktion Berechnen kann und diese dann am Ende zusammen zählt , wäre ich einen riesen Schritt weiter! :)

    (Ich nehme mal an eine Variabel endergebnis = tag1 + tag2 +tag3 usw)

    LG
  10. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ne, das Summieren wäre auf jeden Fall mit einem Feld einfacher, da man da eine Schleife durchlaufen lassen kann. Würde dann so aussehen:
    Private Function BerechneDauer(ByRef BeginnStr As String, ByRef EndeStr As String) As Integer
            ' gibt die Dauer aus zwei Textfeldern als Ineger in Minuten zurück
            Dim Dauer1 As Integer
            Dim Dauer2 As Integer
            Dim Anfang, Ende
            'ANFANG
            'Stunden Anfang, WICHTIG: Stunden zweistellig!!
            Dauer1 = Convert.ToInt32(Microsoft.VisualBasic.Left(BeginnStr, 2))
            'Minuten Anfang, WICHTIG: Minuten zweistellig!!
            Dauer2 = Convert.ToInt32(Microsoft.VisualBasic.Right(BeginnStr, 2))
            'Anfang in Minuten umgerechnet
            'Annahme ist, dass die Minuten in Dezimal angegeben sind, und erst umgerechnet werden müssen:
            Anfang = Dauer1 * 60 + Dauer2 / 100 * 60
            'ENDE
            'Stunden Anfang, WICHTIG: Stunden zweistellig!!
            Dauer1 = Convert.ToInt32(Microsoft.VisualBasic.Left(EndeStr, 2))
            'Minuten Anfang, WICHTIG: Minuten zweistellig!!
            Dauer2 = Convert.ToInt32(Microsoft.VisualBasic.Right(EndeStr, 2))
            'Ende in Minuten umgerechnet
            'Annahme ist, dass die Minuten in Dezimal angegeben sind, und erst umgerechnet werden müssen:
            Ende = Dauer1 * 60 + Dauer2 / 100 * 60
            'Dauer vormittag in Minuten
            BerechneDauer = Ende - Anfang
        End Function
    
        Private Function MinutenInStunden(ByRef Dauer As Integer) As String
            ' gibt das Ergebnis als String für die Anzeige und/oder das Abspeichern zurück
            Dim Dauer_Stunden As Integer
            Dim Dauer_Stunden_Str As String
            Dim Dauer_Minuten As Integer
            Dim Dauer_Minuten_Str As String
            Dauer_Stunden = Dauer \ 60 'ganzzahlige Division
            If Dauer_Stunden < 10 Then
                Dauer_Stunden_Str = "0" & Convert.ToString(Dauer_Stunden)
            Else
                Dauer_Stunden_Str = Convert.ToString(Dauer_Stunden)
            End If
            Dauer_Minuten = Dauer - Dauer_Stunden * 60
            If Dauer_Minuten < 10 Then
                Dauer_Minuten_Str = "0" & Convert.ToString(Dauer_Minuten)
            Else
                Dauer_Minuten_Str = Convert.ToString(Dauer_Minuten)
            End If
            MinutenInStunden = Convert.ToString(Dauer_Stunden_Str) & ":" & Convert.ToString(Dauer_Minuten_Str)
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim DauerFeld_vormittag(0 To 30) As Integer
            Dim DauerFeld_nachmittag(0 To 30) As Integer
            Dim i As Integer
            Dim Gesamtdauer As Integer
            Dim GesamtdauerStr As String
            'Dauer für vormittag in Minuten im Feld ablegen
            DauerFeld_vormittag(0) = BerechneDauer(TextBox1.Text, TextBox2.Text)
            TextBox5.Text = MinutenInStunden(DauerFeld_vormittag(0))
            'Dauer für nachmittag in Minuten im Feld ablegen
            DauerFeld_nachmittag(0) = BerechneDauer(TextBox3.Text, TextBox4.Text)
            TextBox6.Text = MinutenInStunden(DauerFeld_nachmittag(0))
            'hier den Code für die restlichen Tage berechnen
            '
            '
    
            'Gesamtsumme berechnen:
            Gesamtdauer = 0
            For i = 0 To 30
                Gesamtdauer = Gesamtdauer + DauerFeld_vormittag(i)
                Gesamtdauer = Gesamtdauer + DauerFeld_nachmittag(i)
            Next
            GesamtdauerStr = MinutenInStunden(Gesamtdauer)
            Label5.Text = "Summe: " & GesamtdauerStr
        End Sub

    Ich würde für meinen Code natürlich keine derartigen Funktions-Namen verwenden, allerdings denke ich, dass das den Code ganz gut für dich erklärt ;-)
  11. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Huhu!

    Ich danke dir ich habe es Erfolgreich geschafft Tag 2 mithilfe des Codes mit zu Berechnen!

    Doch es gibt noch ein entscheidendes Problem.

    Angenommen ich komme an Tag 1 nur 1 mal und gehe einmal , dann bleiben 2 Kästechen Leer.

    Dann stürzt wieder das Programm ab weil die value von 2 Boxen leer ist.

    Es muss noch eingebaut werden das leere Kästchen immer den wert 00:00 haben sonst bringt das nichts! :)


    Einmal Fehlermeldung in VB: Die Eingabezeichenfolge hat das falsche Format.


    LG


  12. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Es muss noch eingebaut werden das leere Kästchen immer den wert 00:00 haben sonst bringt das nichts! :)

    Dann mach das doch!?
    Was ist denn dabei, den Standard-Text der Textboxen auf "00:00" zu setzen?
    Andere Lösung: eine If-Abfrage in die Funktion zum Berechnen der Dauer in Minuten einbauen, die prüft, ober der Text = "" (also leer ist) ist, und wenn das Feld leer ist, mit 0 rechnen, oder die Berechnung komplett auslassen.
    Das wirst du wohl selber hinbringen ;-)
  13. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hmm auch das bekomme ich nicht hin , ich habe mal ein wenig gegoogelt aber ich weis nicht wo ich die if Bedingung einbauen muss und auch nicht wie ich die Leeren TextBoxen nur Ansprechen kann , ich habe es mal so versucht allerdings ohne erfolg:

    If TextBox(i).Text = "" Then
    
                TextBox(i).Text = "00:00"
    
    
            End If
  14. Ich weiß ja nicht, welchen BASIC-Dialekt Du nutzt. (von mir überlesen, oder von dir nicht erwähnt.), aber es sollte doch eine Funkition wie split() geben.

    Für dich nutzbar als

    Dim Zeitwert = split(Datenerfassungswert, ":")


    Zeitwert ist dann ein Array aus Stunden und 100stel, Die 100stel kannst Du dann, wie von Burgi empfohlen, in Sekunden wandeln

    Daraus sollte sich ein gültiges Zeitformat deines verwendeten Basic-Dialektes erstellen lassen, das, mit sicher voirhandenen Date-/Time-Funktionen, weiter zu verarbeiten ist. Eine Auswertung wie Dauer = Endzeit - Startzeit und anschließende SummierungAuswertung derselben, sollte dann kein Problem mehr darstellen






    Beitrag zuletzt geändert: 14.1.2014 3:30:51 von fatfreddy
  15. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hmm das hilft mir so alles nicht weiter.


    Ich suche einen weg ganzeinfach alle leeren Textboxen die übermittelt werden , den wert 00:00 zuzuweisen.

    LG
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!