Und Verknüpfungen in einer If Abfrage

  • VBScript

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von AngelOfDeath.

    Und Verknüpfungen in einer If Abfrage

    Hallo zusammen, ich habe ein kleines Problem. Ich habe ein programm, welches Datensätze aus einer .txt in ein Array einliest. die Datensätze sind wie folgt angeordnet:
    "25.12.2010;09:00:00;23:59:59;
    04.08.2010;10:00:00;23:59:59;
    26.12.2010;11:00:00;23:59:59;
    16.12.2010;12:00:00;23;59:59;"

    ich trenne die einzelnen Strings jeweils am Semikolon ";" auf und schreibe jeden davon in ein extra feld im Array.

    jetzt muss ich vergleichen, ob das Datum mit dem heutigen übereinstimmt(das ist kein Thema)
    Dann muss ich aber noch abgleichen, ob die momentane Uhrzeit zwischen den beiden angegebenen Uhrzeiten liegt.
    Mein Ansatz dazu sieht wie folgt aus.

    Visual Basic-Quellcode

    1. For i = 0 to Anzahl
    2. If (CStr(Date()) = Feiertage(i) and CStr(Time()) > Feiertage(i+1) and CStr(Time()) < Feiertage(i+2)) then
    3. Ausgabeflag = True
    4. If Ausgabeflag = True then
    5. Exit For
    6. End If
    7. Else Ausgabeflag = False
    8. End If

    Anzahl ist die Menge der bereits abgezählten Datensätze und Feiertage ist das Array in welches ich die Datensätze eingelesen habe.

    er meldet mir hierzu zwar keinen Fehler, aber wenn ich das Programm aufrufe und zum testen, ob sich meine Ausgabeflag auf "True" setzt, das aktuelle datum eintrage, beliebt die Ausgabeflag auf false

    EDIT: ist es überhaupt möglich, zwei strings mittels <> miteinander zu vergleichen? Wenn nein gibt es eine Funktion, mit der ich den String in einen Time Wert umwandeln kann? Mir ist leider nur CDate bekannt und konnte bisher auch sonst nichts passendes dazu finden.

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

    kann dir das mal anbieten und dann musst es halt anpassen

    Visual Basic-Quellcode

    1. Dim AktuellerTag As Date = CDate(Format(Now, "dd.MM.yyyy"))
    2. Dim Silvester As Date = "31.12.2010"
    3. Dim TestDatum As Date = "19.12.2010"
    4. If Not TestDatum > Silvester And Not TestDatum < AktuellerTag Then
    5. MessageBox.Show("OK") 'meldung erscheint
    6. End If

    ------

    Visual Basic-Quellcode

    1. Dim AktuellerTag As Date = CDate(Format(Now, "dd.MM.yyyy"))
    2. Dim Silvester As Date = "31.12.2010"
    3. Dim TestDatum As Date = "12.12.2010" 'DATUM VERÄNDERT
    4. If Not TestDatum > Silvester And Not TestDatum < AktuellerTag Then
    5. MessageBox.Show("OK") 'Meldung kommt NICHT
    6. End If


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hi,

    ich mein es gib so einen Befehl my.computer.* .

    Musst mal selber gucken, aber damit bekommt man auf jeden fall die Systemzeit in eine variable und kann sie dann vergleichen.

    Würde es aber eher per if Abfrage machen if variable_a=variable_b then...

    ??? hat dir vielleicht geholfen
    Hi AngelOfDeath

    Ich habe dir mal eine Lösung zusammengebastelt:

    Visual Basic-Quellcode

    1. Dim strD
    2. strD = "17.12.2010;09:00:00;23:59:59;04.08.2010;10:00:00;23:59:59;17.12.2010;11:00:00;23:59:59;16.12.2010;12:00:00;23:59:59"
    3. Dim times
    4. times = Split(strD,";")
    5. Dim a
    6. a=0
    7. While a <= UBound(times)
    8. If Isdate(times(a)) Then
    9. If a+2 <= UBound(times) Then
    10. If IsDate(times(a+1)) And IsDate(times(a+2)) Then
    11. If CDate(times(a)) = Date Then
    12. WSH.Echo times(a) & " ist heute und.."
    13. If DateDiff("s",FormatDateTime(Now,3),CDate(times(a+1))) < 0 And DateDiff("s",FormatDateTime(Now,3),CDate(times(a+2))) > 0 Then
    14. WSH.Echo Now & " liegt zwischen " & times(a+1) & " und Zeit " & times(a+2)
    15. Else
    16. WSH.Echo "Liegt nicht zwischen " & times(a+1) & " und Zeit " & times(a+2)
    17. End If
    18. Else
    19. WSH.Echo times(a) & " ist nicht heute"
    20. End If
    21. End If
    22. End If
    23. End if
    24. a = a+3
    25. Wend
    Das ist meine Signatur und sie wird wunderbar sein!
    Ich muss leider nochmal nachfragen.
    ich hab deinen Code jetzt an mein Programm angepasst, allerdings erhalte ich jetzt "ungültige Exit Anweisung" und ich kann auch deinen schritt in der Mitte nicht ganz nachvollziehen wo du DateDiff mit < 0 vergleichst.

    Visual Basic-Quellcode

    1. do While i <= uBound(trenner)
    2. If IsDate(Feiertage(i)) then
    3. If IsDate(Feiertage(i+1)) and IsDate(Feiertage(i+2)) then
    4. If CDate(Feiertage(i)) = Date() then
    5. If DateDiff("s", FormatDateTime(Now, 3), CDate(Feiertage(i+1))) < 0 And DateDiff("s", FormatDateTime(Now, 3),CDate(Feiertage(i+2))) > 0 then
    6. Ausgabeflag = True
    7. 'Exit do
    8. 'else Ausgabeflag = false
    9. End If
    10. End If
    11. End If
    12. End If
    13. i= i+3
    14. loop


    beziehungsweise, stellt sich mein Wert einfach nicht auf True, auch wenn die Momentane Uhrzeit und das Datum im vorgegebenen Zeitrahmen liegen

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

    In Feiertgae() sind werte in folgender Form abgespeichert:
    24.05.2010;05:00:00;23:59:59;26.12.2010;10:00:00;23:59:59;
    Anzahl steht für uBound() also die anzahl der eingetragenen Strings.

    Jetzt sollen diese mit dem Aktuellen Datum verglichen werden und es soll herausgefunden werden, ob die momentane Uhrzeit zwischen den beiden angegebenen liegt. Aber mein ergebniss wird niemals True, sondern auch wenn alle Bedingungen erfüllt sind, bekomme ich weiterhin false (0) als Ausgabe.
    Ich bin für jede Hilfe dankbar.

    Visual Basic-Quellcode

    1. do While i <= Anzahl
    2. If IsDate(Feiertage(i)) then
    3. If i+2 <= Anzahl then
    4. If IsDate(Feiertage(i+1)) and IsDate(Feiertage(i+2)) then
    5. If CDate(Feiertage(i)) = Date() then
    6. If DateDiff("s", FormatDateTime(Now, 3), CDate(Feiertage(i+1))) < 0 And DateDiff("s", FormatDateTime(Now, 3),CDate(Feiertage(i+2))) > 0 then
    7. Ausgabeflag = True
    8. Exit do
    9. else Ausgabeflag = False
    10. End If
    11. End If
    12. End if
    13. End If
    14. End If
    15. i= i+3
    16. loop


    wenn ich die do While schleife durch eine While schleife ersetze, bekomme ich "ungültige Exit Anweisung" aber wenn ich die schleife bei einem treffer nicht abbreche wird meine ausgabeflag ja direkt wieder überschrieben mit dem nächsten Ergebniss