1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Jakub1996

Beiträge von Jakub1996

  • Rückgabewert For-Schleife

    • Jakub1996
    • 31. Oktober 2019 um 15:50

    Hi, sorry für die Verwirrung. Hab mal weiter rumprobiert. Hier der neue Code. Meine Idee war, dass der Rückgabewert in $global aus der For-Schleife gespeichert wird. Blöderweise kommt an der Stelle " If $global = "OK" then" die Fehlermeldung, dass die Variable $global nicht deklariert sei...

    An sich ist es nicht anderes als das hier.. Nur, dass es in reduzierter Form funktioniert, im Skript unten aus irgendwelchen Gründen nicht..

    Code
    $confirmBooking = MsgBox(3, "", "Hallo")
    
    
    If $confirmBooking = $IDYES Then
    For $z = 0 to 100 -1
    If $z=30 then
    $global = "30"
    Else
    EndIf
    Next
    Else
    EndIf
    
    If $global = "30" then
    MsgBox(0,"", $global)
    Else
    MsgBox(0, "", "Klappt nicht")
    EndIf
    Alles anzeigen
    Code
             Case $bBook
                If GUICtrlRead($iNameBooking) = "" then
                   MsgBox(0, "Error", "Add your name.")
                Else
                   $riName = GuiCtrlRead($iName)
                   $riDateFrom = GUICtrlRead($iDateFrom)
                   $riHourB = GUICtrlRead($iHourB)
                   $riMinuteB = GUICtrlRead($iMinuteB)
                   $riDateTo = GUICtrlRead($iDateTo)
                   $riHourE = GUICtrlRead($iHourE)
                   $riMinuteE = GUICtrlRead($iMinuteE)
                   $riNameBooking = GUICtrlRead($iNameBooking)
    
                   $confirmBooking = MsgBox(3, "Confirm", "Book " & $riNameInstrument & @CRLF & "from " & $riDateFrom & ", " & $riHourB & ":" & $riMinuteB & @CRLF & "to " & $riDateTo & ", " & $riHourE & ":" & $riMinuteE & " ?")
    
    
                   If $confirmBooking = $IDYES Then
                      $iDateCalc = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00")
                      If $iDateCalc <0 then
                         MsgBox(0, "Error", "Please check your booking entry.")
                      ElseIf $iDateCalc = 0 then
                         MsgBox(0, "Error", "Please check your booking entry.")
                      ElseIf _DateDiff("n", _NowCalc(), $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00") <0 then
                         MsgBox(0, "Error", "Your booking lies in the past. Check your entry.")
                      Else
                         $k = 0
                         For $z = 0 to _GUICtrlListView_GetItemCount($iListViewBooking)-1
                            $aColumn1= _GUICtrlListView_GetItemText($iListViewBooking, $k)
                            $aColumn2= _GUICtrlListView_GetItemText($iListViewBooking, $k, 1)
    
                            $DateDiffFrom1 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn1)
                            $DateDiffTo1 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn2)
                            $DateDiffFrom2 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn2)e
                            $DateDiffTo2 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn1)
                            If $DateDiffFrom1 >=0 And $DateDiffTo2 >=0 Then ;(1) OK
                               $global = "OK"
                            ElseIf $DateDiffFrom1 >=0 And $DateDiffTo2 <=0 Then ;(2)
                               $global = "Error"
                               Exitloop
                            ElseIf $DateDiffFrom2 >=0 And $DateDiffTo1 <=0 Then ;(3)
                               $global = "ERROR"
                               Exitloop
                            ElseIf $DateDiffFrom2 <=0 And $DateDiffTo1 <=0 Then ;(4) OK
                               $global = "OK"
                            ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 <=0 Then ;(5)
                               $global = "ERROR"
                               Exitloop
                            ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 >=0 Then ;(6)5
                               $global = "ERROR"
                               Exitloop
                            Else
                            EndIf
                            $k+=1
                         Next
                      EndIf
                   EndIf
    
                   If $global = "OK" then
                      $Bookingfile = FileOpen("documentation\Booking\" & $riNameInstrument  & ".txt", 1)
                      FileWrite($Bookingfile, @CRLF & $riDateFrom & " " & $riHourB & ":" & $riMinuteB & "|" & $riDateTo & " " & $riHourE & ":" & $riMinuteE & "|" & $riNameBooking)
                      FileClose($Bookingfile)
    
                      _GUICtrlListView_DeleteAllItems($iListViewBooking)
                      _GUICtrlListView_DeleteAllItems($iListViewBooking2)
                      For $z = 2 to 100 -1
                         $LineBooking = FileReadline($idataBooking, $z)
                         $sSeperator = "|"
                         $SubItems = StringSplit($LineBooking, $sSeperator)
                         If $LineBooking = "" Then
                         Else
                            $iDateCalc = _DateDiff("n", _NowCalc(),$SubItems[2])
                            If $iDateCalc >= 0 Then
                               $NewBooking = _GUICtrlListView_AddItem($iListViewBooking, $SubItems[1])
                               For $n = 2 to $SubItems[0]
                                  _GUICtrlListView_AddSubItem($iListViewBooking, $NewBooking, $SubItems[$n], $n - 1)
                               Next
                            Else
                               $NewBooking = _GUICtrlListView_AddItem($iListViewBooking2, $SubItems[1])
                               For $n = 2 to $SubItems[0]
                                  _GUICtrlListView_AddSubItem($iListViewBooking2, $NewBooking, $SubItems[$n], $n - 1)
                               Next
                            EndIf
                         EndIf
                      Next
                   Else
                      MsgBox(0, "Error", "Check your entry.")
                   EndIf
                EndIf
             EndSwitch
          WEnd
    Alles anzeigen
  • Rückgabewert For-Schleife

    • Jakub1996
    • 30. Oktober 2019 um 12:56

    Nein, das Skript stürzt nicht ab. Es gibt nur einen falschen Wiedergabewert "0".

    Die If-Abfrage löst aus.. Habe ich einzeln noch innerhalb der For-Schleife abgefragt.

    Nur bei Abfrage außerhalb der Schleife, ist der Wiedergabewert = 0

    Zitat


    Obwohl $return definitiv in der Schleife auf A oder B gesetzt wird (überprüft mittels Msgbox innerhalb der Schleife)

    Bzw, schreibe ich das Skript, wie folgt um, ergibt sich eine Ausgabe der jeweiligen Werte "A" oder "B"..

    Code
                    $k = 0
                   For $z = 0 to _GUICtrlListView_GetItemCount($iListView)-1    
                      $aColumn1= _GUICtrlListView_GetItemText($iListView, $k)
                      $aColumn2= _GUICtrlListView_GetItemText($iListView, $k, 1)
                     
    
                      $DateDiffFrom1 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn1)
                      $DateDiffTo1 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn2)
                      $DateDiffFrom2 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn2)
                      $DateDiffTo2 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn1)
    
                      If $DateDiffFrom1 >=0 And $DateDiffTo2 >=0 Then ;(1) OK
                         MsgBox(0,"","A")
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo2 <=0 Then ;(2)
                         MsgBox(0,"","B")
                         Exitloop
                      ElseIf $DateDiffFrom2 >=0 And $DateDiffTo1 <=0 Then ;(3)
                         MsgBox(0,"","B")
                         Exitloop
                      ElseIf $DateDiffFrom2 <=0 And $DateDiffTo1 <=0 Then ;(4) OK
                         MsgBox(0,"","A")
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 <=0 Then ;(5)
                         MsgBox(0,"","B")
                         Exitloop
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 >=0 Then ;(6)5
                         MsgBox(0,"","B")
                         Exitloop
                      Else
                      EndIf
                      $k+=1
                   Next
    Alles anzeigen
  • Rückgabewert For-Schleife

    • Jakub1996
    • 30. Oktober 2019 um 12:15

    Hallo alpines,

    danke für deinen Hinweis. Wie ich bereits erwähnt habe, möchte ich einfach nur den Rückgabewert aus der For-Schleife erhalten - Also entweder "A" oder "B", den ich in Zeile 34 dann abfrage.

    Obwohl $return definitiv in der Schleife auf A oder B gesetzt wird (überprüft mittels Msgbox innerhalb der Schleife), ist nach dem Beenden der Schleife dieser Wert nicht übertragen worden.

    Die If-Verzweigung ab Zeile 34 löst also nicht aus, bzw würde auslösen, sofern ich sie umschreibe in..

    If $return = "0" then

    ..

  • Rückgabewert For-Schleife

    • Jakub1996
    • 30. Oktober 2019 um 11:41

    Hallo zusammen,

    ich bin noch relativ neu im Thema, vielleicht habe ich auch einfach die falsche Herangehensweise. Ich suche nach einer Möglichkeit, im Falle eines Exitloops in einer For-Schleife, einen bestimmten Rückgabewert zu erhalten, in diesem Beispiel A oder B. Beim Abbruch der Schleife soll der Wert B ausgegeben werden und dementsprechend die nachfolgende Prozedur ausgeführt werden.

    Schön gedacht - blöd gemacht. Klappt nicht. Also Suche ich nach einer Möglichkeit, eine nachfolgende If-Schleife zu realisieren, die bei Abbruch der Schleife OptionX wählt und bei "normalem" durchlauf der Schleife OptionY - Kurz gesagt: Ich brauche einen Rückgabewert bei Abbruch der Schleife.

    Code
                    $k = 0
                   For $z = 0 to _GUICtrlListView_GetItemCount($iListView)-1    
                      $aColumn1= _GUICtrlListView_GetItemText($iListView, $k)
                      $aColumn2= _GUICtrlListView_GetItemText($iListView, $k, 1)
                     
    
                      $DateDiffFrom1 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn1)
                      $DateDiffTo1 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn2)
                      $DateDiffFrom2 = _DateDiff("n", $riDateFrom & " " & $riHourB & ":" & $riMinuteB & ":00", $aColumn2)
                      $DateDiffTo2 = _DateDiff("n", $riDateTo & " " & $riHourE & ":" & $riMinuteE & ":00", $aColumn1)
    
                      If $DateDiffFrom1 >=0 And $DateDiffTo2 >=0 Then ;(1) OK
                         $return = "A"
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo2 <=0 Then ;(2)
                         $return = "B"
                         Exitloop
                      ElseIf $DateDiffFrom2 >=0 And $DateDiffTo1 <=0 Then ;(3)
                         $return = "B"
                         Exitloop
                      ElseIf $DateDiffFrom2 <=0 And $DateDiffTo1 <=0 Then ;(4) OK
                         $return = "A"
                         MsgBox(0,"", $global)
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 <=0 Then ;(5)
                         $return = "B"
                         Exitloop
                      ElseIf $DateDiffFrom1 >=0 And $DateDiffTo1 >=0 Then ;(6)5
                         $return = "B"
                         Exitloop
                      Else
                      EndIf
                      $k+=1
                   Next
    
    If $return = "A" then
    ...
    ElseIf $return = "B" then
    ...
    EndIf
    Alles anzeigen
  • Unerwartetes schließen einer GUI

    • Jakub1996
    • 24. Oktober 2019 um 20:32

    Das ist es! Das ging ja schnell.. vielen Dank, danach habe ich gesucht!

  • Leere Zeilen textdatei löschen

    • Jakub1996
    • 24. Oktober 2019 um 20:31

    Selbstverständlich ist deine Variante auch nennenswert.. :)


    Ich habe mein Problem zwar anderweitig gelöst (bzw. umgangen ^^), dennoch interessiert es mich nun.. Ich habe es bereits genau so versucht. Nun habe ich deinen Code einfach mal kopiert.. funktioniert nicht

  • Unerwartetes schließen einer GUI

    • Jakub1996
    • 24. Oktober 2019 um 20:26

    Hallo zusammen,

    dann hau mich mal direkt einen weiteren Beitrag hinterher.

    Dabei geht es um das "unerwartete" schließen einer GUI bzw. das unerwartete beenden. Mein Programm erzeugt eine Temporäre Datei, solange das Programm läuft. Zu Beginn wird überprüft, ob diese Datei vorhanden ist. Ist sie es, ist ein starten des Programms verhindert.

    Das ist ein ein kleiner Umweg, um zu verhindern, dass mehrere User gleichzeitig das Programm starten können - Eine Art Read-Only-Funktion.

    Beim schließen durch das "X" wird diese Datei gelöscht. Nun kann es allerdings vorkommen, dass das Skript durch bsp. einen unerwarteten Fehler oder den Taskmanager geschlossen wird.

    Gibt es für einen solchen Fall einen Befehl? Oder habt ihr eine Idee, wie man es realisieren kann, dass im Falle eines unerwarteten Schließens der App, diese Datei wieder gelöscht wird?

    Anderenfalls ist die App - ohne manuelles löschen der temporären Datei - ja nicht mehr zu öffnen..

    Vielen Dank

  • Leere Zeilen textdatei löschen

    • Jakub1996
    • 24. Oktober 2019 um 19:50
    Zitat von Kanashius

    Du ersetzt 2 aufeinanderfolgende Zeilenumbrüche mit einem. Wenn du 3 aufeinanderfolgende Zeilenumbrüche hast ersetzt du 2 mit 1 und hast also noch 2 dort stehen. StringReplace geht den String nur einmal durch und macht somit hinter dem eingefügten Zeilenumbruch weiter. Nehmen wir an, dass U ein Zeilenumbruch darstellt und ^ die Position des ersetzers, wird das so verarbeitet:

    Code
    UUU1U2UU3
    ^ FOUND: U
    UUU1U2UU3
     ^ FOUND: UU -> MATCH: REPLACE
     UU1U2UU3
      ^ FOUND: U
     UU1U2UU3
       ^ FOUND: 1
     UU1U2UU3
        ^ FOUND: U
     UU1U2UU3
         ^ FOUND: 2
     UU1U2UU3
          ^ FOUND: U
     UU1U2UU3
           ^ FOUND: UU -> MATCH: REPLACE
     UU1U2 U3
            ^ FOUND: 3, end
    Alles anzeigen

    In deinem Fall wäre ein regulärere Ausdruck sinnvoller. Das würde so aussehen und dann werden alle Zeilenumbrüche ersetzt (auch unix/linux).

    StringRegExpReplace($inhalt,"(\r\n|\n)+","\r\n")

    Hallo Kanashius,

    vielen Dank dafür, macht durchaus Sinn. Leider Verstehe ich noch nicht ganz wie ich den StrinRegExpReplace-Befehl an dieser Stelle einbinden soll.. Kriege es damit nicht zum laufen - Anders gesagt: Die OUT-Datei ist immer wieder komplett leer.

  • Leere Zeilen textdatei löschen

    • Jakub1996
    • 24. Oktober 2019 um 13:42

    Hallo zusammen,

    ich habe das folgende Skript gefunden:

    Code
    $file = FileOpen("in.txt", 0)
    $inhalt = FileRead($file)
                FileClose($File)
                Do
                   $inhalt = StringReplace($inhalt,@CRLF & @CRLF, @CRLF)
                Until @extended = 0
                $file = FileOpen("out.txt",2)
                $inhalt = FileWrite($file, $inhalt)
                FileClose($File)


    Nun mein Problem:

    Erstelle ich eine Textdatei mit einer Leerzeile in der ersten Zeile..

    pasted-from-clipboard.png

    Kommt als Ergebnis das..

    pasted-from-clipboard.png

    Kann mir jemand von euch sagen, wieso die erste Zeile nicht gelöscht wird? Und vor allem, wie ich es hinbekomme, dass sie gelöscht wird?

    Vielen Dank!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™