czardas

Please test this in your language / region

55 posts in this topic

#1 ·  Posted (edited)

Test instructions are easy.

1. Run the following code in post #46
2. Click the advanced tab
3. Select a start date and an end date
4. Put a tick in the checkbox where it says 'Include Days Of The Week'
5. Click the Okay button

You should get an array with a column of dates in your local format and a second column with day names in your language. It has a current range limit of just under 89 years but this range can appear anywhere between the years 1601 and 9999. The code is untidy and unfinished, but I would still like to know if it works outside the UK. No extra includes are needed. If it works in China, that would make me happy. :)

Latest version in post #46
https://www.autoitscript.com/forum/topic/184849-please-test-this-in-your-language-region/?do=findComment&comment=1327947

#include <Array.au3>
#include <GUIConstants.au3>
#include <GuiEdit.au3>
#include <Misc.au3>
#include <GuiTab.au3>
#include <Date.au3>
#include <APILocaleConstants.au3>
#include <WinAPILocale.au3>
;#include <ArrayWorkshop.au3> ; required functions are already included in this demo

NewTable()

Func NewTable(); ($hParent, $idListView, $hListView) ; [missing parent window]
    Local $sTitle = "New Table", _
    $iStyle = BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), _
    $iExStyle = BitOR($WS_EX_MDICHILD, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST), _
    $iWidth = 250, _
    $iHeight = 292

    Local $hChild = GUICreate($sTitle, $iWidth, $iHeight, Default + 100, Default + 100); , $iStyle, $iExStyle, $hParent)

    Local $idTab = GUICtrlCreateTab(2, 2, $iWidth -2, $iHeight -32)

    GUICtrlCreateTabItem("Standard")

    GUICtrlCreateLabel("Table Dimensions", 14, 35, 120, 20)
    GUICtrlSetColor(-1, 0x008000)

    GUICtrlCreateLabel("Number Of Columns", 14, 60, 94, 18)
    Local $hStandardCols = GUICtrlCreateInput("0", 104 +14, 55, 50, 20, BitOR($WS_TABSTOP, $ES_CENTER, $ES_NUMBER))
    GUICtrlSetFont(-1, 10)

    GUICtrlCreateLabel("Number Of Rows", 14, 83, 90, 18)
    Local $hStandardRows = GUICtrlCreateInput("0", 104 +14, 81, 50, 20, BitOR($WS_TABSTOP, $ES_CENTER, $ES_NUMBER))
    GUICtrlSetFont(-1, 10)

    GUICtrlCreateLabel("Table Indices", 14, 114, 120, 20)
    GUICtrlSetColor(-1, 0x008000)

    Local $hIndices = GUICtrlCreateCheckbox(" Enumerate First Column", 14, 137, 160, 20) ; REMEMBER YES, SETTINGS NO

    Local $hPadding = GUICtrlCreateCheckbox(" Include Leading Zeros", 14, 161, 124, 20) ; REMEMBER YES, SETTINGS NO

    GUICtrlCreateTabItem("Advanced")

    GUICtrlCreateLabel("Column 1 = Date Range", 14, 35, 120, 20)
    GUICtrlSetColor(-1, 0x008000)

    GUICtrlCreateLabel("Start Date", 14, 35 +20, 100, 20)
    Local $idDate1 = GUICtrlCreateDate("", 14, 56 +20, 105, 20, $WS_TABSTOP)

    GUICtrlCreateLabel("End Date", $iWidth - 118, 35 +20, 100, 20)
    Local $idDate2 = GUICtrlCreateDate("", $iWidth - 118, 56 +20, 105, 20, BitOR($WS_TABSTOP, $DTS_RIGHTALIGN))

    GUICtrlCreateLabel("Column 2 = Days Of The Week (Optional)", 14, 108, 220, 20)
    GUICtrlSetColor(-1, 0x008000)

    Local $hCheckBox = GUICtrlCreateCheckbox(" Include Days Of The Week ", 14, 128, 190, 20) ; REMEMBER YES, SETTINGS NO

    Local $hRadio1 = GUICtrlCreateRadio(" Use Short Name", 14, 151)
    Local $hRadio2 = GUICtrlCreateRadio(" Use Long Name", $iWidth - 118, 151)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetState($hRadio1, $GUI_DISABLE) ; check settings later
    GUICtrlSetState($hRadio2, $GUI_DISABLE) ; check settings later

    GUICtrlCreateLabel("Add More Columns", 14, 181, 222, 20)
    GUICtrlSetColor(-1, 0x008000)

    GUICtrlCreateLabel("Total Number Of Columns", 14, 182 +23, 129, 18)
    Local $hColNum = GUICtrlCreateInput("1", 130 +14, 182 +21, 50, 20, BitOR($WS_TABSTOP, $ES_CENTER, $ES_NUMBER)) ; REMEMBER YES, SETTINGS NO
    GUICtrlSetFont(-1, 10)

    GUICtrlCreateTabItem("") ; end tabitem definition

    Local $hCancel = GUICtrlCreateButton("Cancel", $iWidth -143, $iHeight -25, 66, 20)
    Local $hOkay = GUICtrlCreateButton("OK", $iWidth -69, $iHeight -25, 66, 20)
    GUISetState(@SW_SHOW)

    Local $msg2, $bDisable = True, $iMaxFields = 65000, $bStandardError = False, $iRows = 0, $iCols = 0, _
    $sMonitorAdv = GUICtrlRead($idDate1) & GUICtrlRead($idDate2) & GUICtrlRead($hColNum), $sDate1, $sDate2, $sColsAdv, $iDiff, $bErrorAdv = False

    While 1
        $msg2 = GUIGetMsg()
        If $msg2 = $hCancel Or $msg2 = $GUI_EVENT_CLOSE Then ExitLoop

        If BitAND(GUICtrlRead($hCheckBox), $GUI_CHECKED) == $GUI_CHECKED Then
            If $bDisable Then
                GUICtrlSetState($hRadio1, $GUI_ENABLE)
                GUICtrlSetState($hRadio2, $GUI_ENABLE)
                $bDisable  = False
            EndIf

        ElseIf Not $bDisable Then
            GUICtrlSetState($hRadio1, $GUI_DISABLE)
            GUICtrlSetState($hRadio2, $GUI_DISABLE)
            $bDisable  = True
        EndIf

        $sDate1 = GUICtrlRead($idDate1)
        $sDate2 = GUICtrlRead($idDate2)
        $sColsAdv = GUICtrlRead($hColNum)

        If $sDate1 & $sDate2 & $sColsAdv <> $sMonitorAdv Then

            $iDiff = DateRange(LocaleDateToYMD($sDate1), LocaleDateToYMD($sDate2)) ; _DateDiff() is too limited

            If $iDiff * $sColsAdv > $iMaxFields Then
                If Not $bErrorAdv Then
                    GUICtrlSetBkColor($hColNum, 0xFFA090)
                    $bErrorAdv = True
                EndIf

            ElseIf $bErrorAdv Then
                GUICtrlSetBkColor($hColNum, 0xFFFFFF)
                $bErrorAdv = False
            EndIf

            $sMonitorAdv = $sDate1 & $sDate2 & $sColsAdv
        EndIf

        $iCols = GUICtrlRead($hStandardCols)
        $iRows = GUICtrlRead($hStandardRows)

        If Not $iRows Then GUICtrlSetData($hStandardRows, 0)
        If Not $iCols Then GUICtrlSetData($hStandardCols, 0)

        If ControlGetFocus($hChild) <> "Edit2" And StringRegExp($iRows, '\A0+[1-9]') Then GUICtrlSetData($hStandardRows, StringRegExpReplace($iRows, '(\A0+)([1-9])(\d+)*', '$2$3'))
        If ControlGetFocus($hChild) <> "Edit1" And StringRegExp($iCols, '\A0+[1-9]') Then GUICtrlSetData($hStandardCols, StringRegExpReplace($iCols, '(\A0+)([1-9])(\d+)*', '$2$3'))

        If $iRows > $iMaxFields Or $iCols > $iMaxFields Or GUICtrlRead($hStandardRows) * GUICtrlRead($hStandardCols) > $iMaxFields Then
            If Not $bStandardError Then
                GUICtrlSetBkColor($hStandardRows, 0xFFA090)
                GUICtrlSetBkColor($hStandardCols, 0xFFA090)
                $bStandardError = True
            EndIf

        ElseIf $bStandardError Then
            GUICtrlSetBkColor($hStandardRows, 0xFFFFFF)
            GUICtrlSetBkColor($hStandardCols, 0xFFFFFF)
            $bStandardError = False
        EndIf

        $iCols = GUICtrlRead($hColNum)
        If ControlGetFocus($hChild) <> "Edit3" And StringRegExp($iCols, '\A0+[1-9]') Then GUICtrlSetData($hColNum, StringRegExpReplace($iCols, '(\A0+)([1-9])(\d+)*', '$2$3'))

        $iCols = GUICtrlRead($hColNum)
        If $iCols < 1 Then
            If BitAND(GUICtrlRead($hCheckBox), $GUI_CHECKED) == $GUI_CHECKED And ControlGetFocus($hChild) <> "Edit3" Then
                GUICtrlSetData($hColNum, 2)
            Else
                GUICtrlSetData($hColNum, 1)
            EndIf
            If ControlGetFocus($hChild) = "Edit3" Then _GUICtrlEdit_SetSel($hColNum, 0, -1)
        EndIf

        If BitAND(GUICtrlRead($hCheckBox), $GUI_CHECKED) == $GUI_CHECKED Then
            If $iCols < 2 And ControlGetFocus($hChild) <> "Edit3" Then
                If ControlGetFocus($hChild) = "Button3" Then
                    While _IsPressed('01')
                        Sleep(20)
                    WEnd
                EndIf

                If BitAND(GUICtrlRead($hCheckBox), $GUI_CHECKED) == $GUI_CHECKED Then
                    GUICtrlSetData($hColNum, 2)
                Else
                    GUICtrlSetData($hColNum, 1)
                EndIf
            EndIf
        Else
            If $iCols < 1 Then
                GUICtrlSetData($hColNum, 1)
                If ControlGetFocus($hChild) = "Edit3" Then _GUICtrlEdit_SetSel($hColNum, 0, -1)
            EndIf
        EndIf

        If $msg2 = $hOkay Then
            If $bErrorAdv Then
                MsgBox(262160, "uh-uh!", "Out of Range")
                ContinueLoop
            EndIf

            Local $sDelim = '-' ; read from settings ??? [maybe]
            If _GUICtrlTab_GetCurFocus($idTab) = 1 Then
                Local $iName, $sFormat = Default ; read from settings [ini]
                If BitAND(GUICtrlRead($hCheckBox), $GUI_CHECKED) == $GUI_CHECKED Then
                    $iName = (BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) == $GUI_CHECKED) ? 3 : 2
                Else
                    $iName = -1
                EndIf

                ; $sStartDate, $sStopDate, $sDelim = Default, $sFormat = Default, $iDayName = -1)
                GetDateArray(GUICtrlRead($idDate1), GUICtrlRead($idDate2), $sDelim, $sFormat, $iName) ; US [, '$3-$5-$1'])

            EndIf
        EndIf
    WEnd
    GUIDelete($hChild)
EndFunc ;==> NewTable

Func LocaleDateToYMD($sDate, $sDelim = '/')
    Local $iID = _WinAPI_GetUserDefaultLCID(), _
    $aDateSplit = StringRegExp(_WinAPI_GetLocaleInfo($iID, $LOCALE_SSHORTDATE), '\w+', 3), _
    $vTest = True ; [floating variable]

    If IsArray($aDateSplit) And UBound($aDateSplit) = 3 Then
        For $i = 0 To 2 ; determine the locale ymd order
            If StringInStr($aDateSplit[$i], 'y') Then
                $aDateSplit[$i] = 1 ; year
            ElseIf StringInStr($aDateSplit[$i], 'm') Then
                $aDateSplit[$i] = 2 ; month
            ElseIf StringInStr($aDateSplit[$i], 'd') Then
                $aDateSplit[$i] = 3 ; day
            EndIf
        Next

        $vTest = $aDateSplit[0] & $aDateSplit[1] & $aDateSplit[2]
        If StringInStr($vTest, '1') And StringInStr($vTest, '2') And StringInStr($vTest, '3') Then $vTest = False ; success
    EndIf

    If $vTest Then ; failure with the previous method [both methods work on Win7 in the UK]
        Local $sLongDate = _WinAPI_GetDateFormat(0, 0, $DATE_LONGDATE)
        $aDateSplit = StringRegExp($sLongDate, '(*UCP)\w+', 3)
        If Not IsArray($aDateSplit) And UBound($aDateSplit) <> 3 Then Return SetError(1) ; undetermined error?

        For $i = 0 To 2 ; determine the locale ymd order
            If $aDateSplit[$i] = @YEAR Then ; hopefully this method will work for all international regions
                $aDateSplit[$i] = 1 ; year
            ElseIf $aDateSplit[$i] = _DateToMonth(@MON, $DMW_LOCALE_LONGNAME) Then
                $aDateSplit[$i] = 2 ; month
            Else
                $aDateSplit[$i] = 3 ; day
            EndIf
        Next

        $vTest = $aDateSplit[0] & $aDateSplit[1] & $aDateSplit[2]
        If Not (StringInStr($vTest, '1') And StringInStr($vTest, '2') And StringInStr($vTest, '3')) Then Return SetError(2) ; undetermined error?
    EndIf

    Local $iCount = 1, $sYMD = ''
    Do
        For $i = 0 To 2
            If $aDateSplit[$i] = $iCount Then
                $sYMD &= '$'& ($i*2 +1) & ($iCount <> 3 ? $sDelim : '')
                $iCount += 1
                ExitLoop
            EndIf
        Next
    Until $iCount = 4

    Return StringRegExpReplace($sDate, '(\d+)(\D)(\d+)(\D)(\d+)', $sYMD)
EndFunc

Func GetDateArray($sStartDate, $sStopDate, $sDelim = Default, $sFormat = Default, $iDayName = -1)
    Local $iID = _WinAPI_GetUserDefaultLCID(), _
    $aDateSplit = StringRegExp(_WinAPI_GetLocaleInfo($iID, $LOCALE_SSHORTDATE), '\w+', 3)

    If IsArray($aDateSplit) And UBound($aDateSplit) = 3 Then
        For $i = 0 To 2 ; determine the locale ymd order
            If StringInStr($aDateSplit[$i], 'y') Then
                $aDateSplit[$i] = 1 ; year
            ElseIf StringInStr($aDateSplit[$i], 'm') Then
                $aDateSplit[$i] = 2 ; month
            ElseIf StringInStr($aDateSplit[$i], 'd') Then
                $aDateSplit[$i] = 3 ; day
            EndIf
        Next

    Else ; let's try an alternative method [both methods work on Win7 in the UK]
        Local $sLongDate = _WinAPI_GetDateFormat(0, 0, $DATE_LONGDATE)
        $aDateSplit = StringRegExp($sLongDate, '(*UCP)\w+', 3)
        If Not IsArray($aDateSplit) And UBound($aDateSplit) <> 3 Then Return SetError(1) ; undetermined error?

        For $i = 0 To 2 ; determine the locale ymd order
            If $aDateSplit[$i] = @YEAR Then ; hopefully this method will work for all international regions
                $aDateSplit[$i] = 1 ; year
            ElseIf $aDateSplit[$i] = _DateToMonth(@MON, $DMW_LOCALE_LONGNAME) Then
                $aDateSplit[$i] = 2 ; month
            Else
                $aDateSplit[$i] = 3 ; day
            EndIf
        Next
    EndIf

    ; check the array contains numbers 1 to 3
    Local $sTest = $aDateSplit[0] & $aDateSplit[1] & $aDateSplit[2]
    If Not (StringInStr($sTest, '1') And StringInStr($sTest, '2') And StringInStr($sTest, '3')) Then Return SetError(2) ; undetermined error?

    If $sDelim = Default Then $sDelim = StringRegExp($sStartDate, '\D+', 3)[0]

    Local $iCount = 1, $sYMD = ''
    Do
        For $i = 0 To 2
            If $aDateSplit[$i] = $iCount Then
                $sYMD &= '$'& ($i*2 +1) & ($iCount <> 3 ? $sDelim : '')
                $iCount += 1
                ExitLoop
            EndIf
        Next
    Until $iCount = 4

    $sStartDate = StringRegExpReplace($sStartDate, '(\d+)(\D)(\d+)(\D)(\d+)', $sYMD)
    $sStopDate  = StringRegExpReplace($sStopDate,  '(\d+)(\D)(\d+)(\D)(\d+)', $sYMD)

    Local $vReverse = False
    If $sStartDate > $sStopDate Then
        $vReverse = $sStartDate
        $sStartDate = $sStopDate
        $sStopDate = $vReverse
    EndIf

    ; internal format = yyyy/mm/dd
    Local $iStartYear = Number(StringRegExp($sStartDate, '\d+', 3)[0]), $iStopYear = Number(StringRegExp($sStopDate, '\d+', 3)[0])

    Local $aTimeLine[(($iStopYear - $iStartYear +1) *366)]

    $iCount = 0
    For $iYear = $iStartYear To $iStopYear
        For $iMon = 1 To 12
            Switch $iMon
                Case 1, 3, 5, 7, 8, 10, 12
                    For $iDay = 1 To 31 ; this section of code can be shortened
                        $aTimeLine[$iCount] = $iYear & $sDelim & StringFormat('%02i', $iMon) & $sDelim & StringFormat('%02i', $iDay)
                        If $aTimeLine[$iCount] = $sStopDate Then ExitLoop 3
                        $iCount += 1
                    Next

                Case 4, 6, 9, 11
                    For $iDay = 1 To 30
                        $aTimeLine[$iCount] = $iYear & $sDelim & StringFormat('%02i', $iMon) & $sDelim & StringFormat('%02i', $iDay)
                        If $aTimeLine[$iCount] = $sStopDate Then ExitLoop 3
                        $iCount += 1
                    Next

                Case Else
                    For $iDay = 1 To IsLeapYear($iYear) ? 29 : 28
                        $aTimeLine[$iCount] = $iYear & $sDelim & StringFormat('%02i', $iMon) & $sDelim & StringFormat('%02i', $iDay)
                        If $aTimeLine[$iCount] = $sStopDate Then ExitLoop 3
                        $iCount += 1
                    Next
            EndSwitch
        Next
    Next

    ReDim $aTimeLine[$iCount +1] ; get rid of unused elements

    For $i = 0 To UBound($aTimeLine) -1
        If $aTimeLine[$i] = $sStartDate Then
            _DeleteRegion($aTimeLine, 1, 0, $i)
            ExitLoop
        EndIf
    Next

    _Predim($aTimeLine, 2) ; add 2nd dimension

    ; adding a day name column only works for start dates up to christmas day 2999 [millennium bug], is it worth fixing? ==> [FIXED]

    If $iDayName <> -1 Then ; $iDayName set to -1 because _DateDayOfWeek() format values range from 0 to 3
        ReDim $aTimeLine[UBound($aTimeLine)][2]

        Local $aNextDay, $iDayNum

        If $sStartDate <= ('2999' & $sDelim & '12' & $sDelim & '25') Then
            For $i = 0 To 6
                If $i = UBound($aTimeLine) Then ExitLoop
                $aNextDay = StringRegExp($aTimeLine[$i][0], '\d+', 3)
                $iDayNum = _DateToDayOfWeek (Number($aNextDay[0]), Number($aNextDay[1]), Number($aNextDay[2]))
                $aTimeLine[$i][1] = _DateDayOfWeek($iDayNum, $iDayName)
            Next

            For $i = 7 To UBound($aTimeLine) -1
                $aTimeLine[$i][1] = $aTimeLine[Mod($i, 7)][1]
            Next

        Else
            Local $aDayName[7]
            For $i = 25 To 31
                $aNextDay = StringRegExp('2999/12/' & $i, '\d+', 3)
                $iDayNum = _DateToDayOfWeek (Number($aNextDay[0]), Number($aNextDay[1]), Number($aNextDay[2]))
                $aDayName[$i -25] = _DateDayOfWeek($iDayNum, $iDayName)
            Next

            Local $iDateDiff = DateRange('2999/12/25', StringReplace($aTimeLine[0][0], $sDelim, '/'))

            For $i = 0 to 6
                If $i = UBound($aTimeLine) Then ExitLoop
                $aTimeLine[$i][1] = $aDayName[Mod($iDateDiff + $i -1, 7)]
            Next

            For $i = 7 To UBound($aTimeLine) -1
                $aTimeLine[$i][1] = $aTimeLine[Mod($i, 7)][1]
            Next
        EndIf
    EndIf

    If $sFormat = Default Then ; [regexp pattern stored in ini or settings]
        $aDateSplit = StringRegExp($sYMD, '\d', 3)
        _Predim($aDateSplit, 2)
        ReDim $aDateSplit[3][2]
        $aDateSplit[0][1] = 1
        $aDateSplit[1][1] = 3
        $aDateSplit[2][1] = 5
        _ArraySort($aDateSplit)
        $sFormat = '$' & $aDateSplit[0][1] & $sDelim & '$' &  $aDateSplit[1][1] & $sDelim & '$' &  $aDateSplit[2][1]
    EndIf

    For $i = 0 To UBound($aTimeLine) -1
        $aTimeLine[$i][0] = StringRegExpReplace($aTimeLine[$i][0], '(\d+)(\D)(\d+)(\D)(\d+)', $sFormat)
    Next

    If $vReverse Then _ReverseArray($aTimeLine)

    _ArrayDisplay($aTimeLine)
    Return $aTimeLine
EndFunc ;==> GetDateArray

Func IsLeapYear($iYear)
    If Mod($iYear, 4) Then
        Return False
    ElseIf Mod($iYear, 100) Then
        Return True
    ElseIf Mod($iYear, 400) Then
        Return False
    Else
        Return True
    EndIf
EndFunc ;==> IsLeapYear

Func DateRange($sDate1, $sDate2) ; must be yyyy/mm/dd
    Local $vTemp
    If $sDate1 > $sDate2 Then
        $vTemp = $sDate1
        $sDate1 = $sDate2
        $sDate2 = $vTemp
    EndIf

    Local $aArray1 = StringRegExp($sDate1, '\d+', 3), $aArray2 = StringRegExp($sDate2, '\d+', 3)
    For $i = 0 To 2
        $aArray1[$i] = Number($aArray1[$i])
        $aArray2[$i] = Number($aArray2[$i])
    Next

    Local $iCount = 0
    For $i = $aArray1[0] +1 To $aArray2[0] -1
        If Not IsLeapYear($i) Then
            $iCount += 365
        Else
            $iCount += 366
        EndIf
    Next

    Local $iFirstMonth = 0
    Switch $aArray1[1]
        Case 1, 3, 5, 7, 8, 10, 12
            $iFirstMonth = 32 - $aArray1[2]
        Case 4, 6, 9, 11
            $iFirstMonth = 31 - $aArray1[2]
        Case Else
            $iFirstMonth = (IsLeapYear($aArray1[0]) ? 30 : 29) - $aArray1[2]
    EndSwitch

    If $aArray1[0] < $aArray2[0] Then
        $iCount += $iFirstMonth

        For $i = $aArray1[1] +1 to 12
            Switch $i
                Case 1, 3, 5, 7, 8, 10, 12
                    $iCount += 31
                Case 4, 6, 9, 11
                    $iCount += 30
                Case Else
                    $iCount += (IsLeapYear($aArray1[0]) ? 29 : 28)
            EndSwitch
        Next

        $iCount += $aArray2[2] ; add remaining days in final month
        If $aArray2[1] > 1 Then
            For $i = 1 To $aArray2[1] -1
                Switch $i
                    Case 1, 3, 5, 7, 8, 10, 12
                        $iCount += 31
                    Case 4, 6, 9, 11
                        $iCount += 30
                    Case Else
                        $iCount += (IsLeapYear($aArray2[0]) ? 29 : 28)
                EndSwitch
            Next
        EndIf

    ElseIf $aArray1[1] < $aArray2[1] Then ; same year, different month
        $iCount += $iFirstMonth
        For $i = $aArray1[1] +1 to $aArray2[1] -1
            Switch $i
                Case 1, 3, 5, 7, 8, 10, 12
                    $iCount += 31
                Case 4, 6, 9, 11
                    $iCount += 30
                Case Else
                    $iCount += (IsLeapYear($aArray1[0]) ? 29 : 28)
            EndSwitch
        Next
        $iCount += $aArray2[2]

    Else ; same month and year
        $iCount = $aArray2[2] - $aArray1[2] +1
    EndIf

    Return $iCount
EndFunc ;==> DateRange

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Functions from ArrayWorkshop.au3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#Au3Stripper_Off

Func _ReverseArray(ByRef $aArray, $iDimension = 1, $iStart = 0, $iEnd = -1)
    If Not IsArray($aArray) Or UBound($aArray, 0) > 9 Then Return SetError(1) ; not a valid array

    Local $aBound = __GetBounds($aArray)
    If @error Then Return SetError(2) ; array contains zero elements

    $iDimension = ($iDimension = Default) ? 1 : Int($iDimension)
    If $iDimension < 1 Or $iDimension > $aBound[0] Then Return SetError(3) ; dimension does not exist

    $iStart = ($iStart = Default) ? 0 : Int($iStart)
    If $iStart < 0 Or $iStart > $aBound[$iDimension] - 2 Then Return SetError(4) ; meaningless $iStart value

    $iEnd = ($iEnd = -1 Or $iEnd = Default) ? $aBound[$iDimension] - 1 : Int($iEnd)
    If $iEnd <= $iStart Or $iEnd >= $aBound[$iDimension] Then Return SetError(5) ; meaningless $iEnd value

    If $aBound[0] = 1 Then
        ___Reverse1D($aArray, $iStart, $iEnd)
    Else
        $aBound[$iDimension] = 1
        Local $aRegion = ___NewArray($aBound) ; to store extracted regions

        For $i = 1 To $aBound[0]
            $aBound[$i] -= 1
        Next

        Local $sIndices = __HiddenIndices($aBound[0], $iDimension), $fnFloodFill = __FloodFunc()[$aBound[0]], _
                $sTransfer = '$aSource' & $sIndices ; array syntax

        While $iEnd > $iStart
            $fnFloodFill($aRegion, $aBound, $iDimension, 0, $iStart, $aArray, $sTransfer) ; extract the current start region

            $sTransfer = '$aTarget' & $sIndices
            $fnFloodFill($aArray, $aBound, $iDimension, $iStart, $iEnd, '', $sTransfer) ; overwrite the current start region

            $sTransfer = '$aSource' & $sIndices
            $fnFloodFill($aArray, $aBound, $iDimension, $iEnd, 0, $aRegion, $sTransfer) ; overwrite the current end region

            $iStart += 1
            $iEnd -= 1
        WEnd
    EndIf
EndFunc    ;==>_ReverseArray

Func _DeleteRegion(ByRef $aArray, $iDimension = 1, $iSubIndex = 0, $iRange = 1)
    If Not IsArray($aArray) Then Return SetError(1)

    Local $aBound = __GetBounds($aArray) ; get the bounds of each dimension
    If @error Then Return SetError(4) ; $aArray must contain at least one element
    If $aBound[0] > 9 Then Return SetError(2) ; nine dimension limit

    $iDimension = ($iDimension = Default) ? 1 : Int($iDimension)
    If $iDimension > $aBound[0] Or $iDimension < 1 Then Return SetError(3) ; out of bounds dimension

    $iSubIndex = ($iSubIndex = Default) ? 0 : Int($iSubIndex)
    If $iSubIndex < 0 Or $iSubIndex > $aBound[$iDimension] - 1 Then Return SetError(5) ; sub-index does not exist in the dimension

    $iRange = ($iRange = Default) ? 1 : Int($iRange)
    If $iRange < 1 Then Return SetError(6) ; range must be greater than zero
    $iRange = ($iSubIndex + $iRange < $aBound[$iDimension]) ? $iRange : $aBound[$iDimension] - $iSubIndex ; corrects for overflow
    If $iRange = $aBound[$iDimension] Then Return SetError(6) ; deleting the whole region is not currently supported [give reason]

    $aBound[$iDimension] -= $iRange ; the size of the dimension in the new array

    If $aBound[0] = 1 Then
        For $iNext = $iSubIndex To $aBound[$iDimension] - 1
            $aArray[$iNext] = $aArray[$iNext + $iRange]
        Next
        ReDim $aArray[$aBound[$iDimension]]
        Return
    EndIf

    Local $iMaxIndex = $aBound[$iDimension] - 1
    For $i = 1 To $aBound[0]
        $aBound[$i] -= 1
    Next
    $aBound[$iDimension] = 0 ; set to loop once [one region at a time]

    Local $iFrom, $sTransfer = '$aTarget' & __HiddenIndices($aBound[0], $iDimension), $fnFloodFill = __FloodFunc()[$aBound[0]]

    For $iNext = $iSubIndex To $iMaxIndex
        $iFrom = $iNext + $iRange
        $fnFloodFill($aArray, $aBound, $iDimension, $iNext, $iFrom, '', $sTransfer) ; overwrite the final [untouched] region
    Next

    $aBound[$iDimension] = $iMaxIndex
    For $i = 1 To $aBound[0]
        $aBound[$i] += 1
    Next

    __ResetBounds($aArray, $aBound) ; delete remaining indices
EndFunc    ;==>_DeleteRegion

Func _PreDim(ByRef $aArray, $iDimensions, $bPush = False)
    If Not IsArray($aArray) Then Return SetError(1)

    $iDimensions = Int($iDimensions)
    If $iDimensions < 1 Or $iDimensions > 9 Then Return SetError(2)

    Local $iPreDims = UBound($aArray, 0) ; current number of dimensions
    If $iPreDims = $iDimensions Then Return ; no change
    If $iPreDims > 9 Then Return SetError(3) ; too many dimensions

    Local $aBound = __GetBounds($aArray) ; get the size of each original dimension
    If @error Then Return SetError(4) ; $aArray must contain at least one element

    $aBound[0] = $iDimensions ; overwrite this value with the new number of dimensions

    Local $sTransfer = '[$a[1]][$a[2]][$a[3]][$a[4]][$a[5]][$a[6]][$a[7]][$a[8]][$a[9]]' ; array syntax to be sent to the remote loop region

    If $bPush Then ; prefix dimensions, or delete from the left
        Local $iOffset = Abs($iDimensions - $iPreDims)
        If $iPreDims > $iDimensions Then ; lower dimensions get deleted
            For $i = 1 To $iDimensions ; shift elements to lower indices
                $aBound[$i] = $aBound[$i + $iOffset]
            Next
            $sTransfer = '$aSource' & StringLeft('[0][0][0][0][0][0][0][0]', $iOffset * 3) & StringLeft($sTransfer, $iDimensions * 7)

        Else ; lower dimensions are created
            ReDim $aBound[$iDimensions + 1] ; make space for more dimensions
            For $i = $iDimensions To $iOffset + 1 Step -1 ; shift elements to higher indices
                $aBound[$i] = $aBound[$i - $iOffset]
            Next
            For $i = 1 To $iOffset ; assign the size of each additional dimension [1][1][1]... etc...
                $aBound[$i] = 1
            Next

            $sTransfer = '$aSource' & StringMid($sTransfer, 1 + $iOffset * 7, $iPreDims * 7)
        EndIf

    Else ; Default behaviour = append dimensions, or delete from the right
        ReDim $aBound[$iDimensions + 1] ; modify the number of dimensions [according to the new array]

        For $i = $iPreDims + 1 To $iDimensions ; assign the size of each new dimension ...[1][1][1] etc...
            $aBound[$i] = 1
        Next
        $sTransfer = '$aSource' & StringLeft($sTransfer, $iPreDims * 7)
    EndIf

    ; add or remove dimensions
    Local $aNewArray = ___NewArray($aBound)

    For $i = 1 To $iDimensions
        $aBound[$i] -= 1 ; convert elements to the maximum index value within each dimension
    Next

    ; access the remote loop region
    Local $iSubIndex = 0, $aFloodFill = __FloodFunc()
    $aFloodFill[$iDimensions]($aNewArray, $aBound, 0, $iSubIndex, '', $aArray, $sTransfer)

    $aArray = $aNewArray
EndFunc    ;==>_PreDim

Func __GetBounds($aArray, $iHypothetical = 0)
    Local $iMaxDim = UBound($aArray, 0)
    Local $aBound[($iHypothetical ? $iHypothetical : $iMaxDim) + 1] ; [or ==> Local $aBound[9]]
    $aBound[0] = $iMaxDim
    For $i = 1 To $iMaxDim
        $aBound[$i] = UBound($aArray, $i)
        If $aBound[$i] = 0 Then Return SetError(1)
    Next
    If $iHypothetical Then
        For $i = $iMaxDim + 1 To $iHypothetical
            $aBound[$i] = 1 ; imaginary dimensions
        Next
    EndIf
    Return $aBound
EndFunc    ;==>__GetBounds

Func __HiddenIndices($iBound, $iDimension)
    Local $sSyntax = '' ; to access elements at their original indices
    For $i = 1 To $iBound
        If $i <> $iDimension Then
            $sSyntax &= '[$a[' & $i & ']]' ; default ==> '$aSource[$iFrom][$a[2]][$a[3]][$a[4]][$a[5]] etc...'
        Else
            $sSyntax &= '[$iFrom]'
        EndIf
    Next
    Return $sSyntax
EndFunc    ;==>__HiddenIndices

Func ___NewArray($aBound)
    Switch $aBound[0]
        Case 1
            Local $aArray[$aBound[1]]
        Case 2
            Local $aArray[$aBound[1]][$aBound[2]]
        Case 3
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]]
        Case 4
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]]
        Case 5
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]]
        Case 6
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]]
        Case 7
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]]
        Case 8
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]][$aBound[8]]
        Case 9
            Local $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]][$aBound[8]][$aBound[9]]
    EndSwitch
    Return $aArray
EndFunc    ;==>___NewArray

Func ___Reverse1D(ByRef $aArray, $iStart, $iStop)
    Local $vTemp
    While $iStop > $iStart
        $vTemp = $aArray[$iStart]
        $aArray[$iStart] = $aArray[$iStop]
        $aArray[$iStop] = $vTemp
        $iStart += 1
        $iStop -= 1
    WEnd
EndFunc    ;==>___Reverse1D

Func __ResetBounds(ByRef $aArray, $aBound)
    Switch $aBound[0]
        Case 1
            ReDim $aArray[$aBound[1]]
        Case 2
            ReDim $aArray[$aBound[1]][$aBound[2]]
        Case 3
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]]
        Case 4
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]]
        Case 5
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]]
        Case 6
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]]
        Case 7
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]]
        Case 8
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]][$aBound[8]]
        Case 9
            ReDim $aArray[$aBound[1]][$aBound[2]][$aBound[3]][$aBound[4]][$aBound[5]][$aBound[6]][$aBound[7]][$aBound[8]][$aBound[9]]
    EndSwitch
EndFunc    ;==>__ResetBounds

Func __FloodFunc() ; [modified for this demo]
    Local $aFloodFunc = ['', ___Flood1D, ___Flood2D] ; , ___Flood3D, ___Flood4D, ___Flood5D, ___Flood6D, ___Flood7D, ___Flood8D, ___Flood9D]
    Return $aFloodFunc
EndFunc    ;==>__FloodFunc

Func ___Flood1D(ByRef $aTarget, $aBound, $iDimension, $iSubIndex, $iFrom, $aSource, $sTransfer) ; [still experimental]
    #forceref $iDimension, $iFrom, $aSource ; $iDimension would normally not apply here (special case)
    Local $a[10] = ['', 0, 0, 0, 0, 0, 0, 0, 0, 0] ; loop iteration count [or indices of higher dimensions within the source array]
    For $a[1] = $iSubIndex To $aBound[1] ; from the start to the bounds of the 1st dimension (special case)
        ; only one operation is needed in this special case
        $aTarget[$a[1]] = Execute($sTransfer) ; hidden parameters may appear in the code being executed
    Next
EndFunc    ;==>___Flood1D

Func ___Flood2D(ByRef $aTarget, $aBound, $iDimension, $iSubIndex, $iFrom, $aSource, $sTransfer)
    #forceref $iFrom, $aSource ; hidden parameters
    Local $a[10] = ['', 0, 0, 0, 0, 0, 0, 0, 0, 0] ; loop iteration count [or indices of higher dimensions within the source array]
    For $a[2] = 0 To $aBound[2]
        For $a[1] = 0 To $aBound[1]
            $a[$iDimension] = $iSubIndex ; override the iteration count (fast method) - $a[0] has no influence
            $aTarget[$a[1]][$a[2]] = Execute($sTransfer) ; hidden parameters may appear in the code being executed
        Next
    Next
EndFunc    ;==>___Flood2D

#Au3Stripper_On

 

Edited by czardas

Share this post


Link to post
Share on other sites



#2 ·  Posted

Croatian works fine.

1 person likes this

♡♡♡

.

eMyvnE

Share this post


Link to post
Share on other sites

#3 ·  Posted

Looks great for US. I tested a couple and am seeing one element (usually first or last) not being populated. For example, here is excerpt for 2/26/1976 (greatest day in history) to today:

05-2016-12  |Monday
06-2016-12  |Tuesday
07-2016-12  |Wednesday
08-2016-12  |Thursday
09-2016-12  |Friday
10-2016-12  |Saturday
11-2016-12  |Sunday
12-2016-12  |Monday
13-2016-12  |Tuesday
14-2016-12  |Wednesday
15-2016-12  |Thursday
16-2016-12  |Friday
17-2016-12  |Saturday
18-2016-12  |Sunday
19-2016-12  |Monday
20-2016-12  |Tuesday
21-2016-12  |Wednesday
22-2016-12  |Thursday
23-2016-12  |Friday
24-2016-12  |Saturday
25-2016-12  |Sunday
26-2016-12  |Monday
27-2016-12  |Tuesday
28-2016-12  |Wednesday
29-2016-12  |Thursday
30-2016-12  |Friday
31-2016-12  |Saturday
            |Sunday

And for today through 10/20:

|Sunday
31-2016-12  |Saturday
30-2016-12  |Friday
29-2016-12  |Thursday
28-2016-12  |Wednesday
27-2016-12  |Tuesday
26-2016-12  |Monday
25-2016-12  |Sunday
24-2016-12  |Saturday
23-2016-12  |Friday
22-2016-12  |Thursday
21-2016-12  |Wednesday
20-2016-12  |Tuesday
19-2016-12  |Monday
18-2016-12  |Sunday
17-2016-12  |Saturday

 


When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

Share this post


Link to post
Share on other sites

#4 ·  Posted

@JLogan3o13 Thanks for testing. I am not getting the missing dates. I'm not sure how to fix that. Perhaps I could change the language settings on my computer and try to reproduce this error. Which OS did you use to test it?

Share this post


Link to post
Share on other sites

#5 ·  Posted

PT-BR works fine.

1HgTlK0.png

1 person likes this

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Windows 7x64 Enterprise. I'll try it on Windows 10 here in a second.

Edit: Same behavior on Windows 10 - for short spans element 0 seems to be affected, the nth element for longer queries

Edited by JLogan3o13
1 person likes this

When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

Share this post


Link to post
Share on other sites

#7 ·  Posted

German also fine:

Row|Col 0|Col 1
[0]|03-10-2016|Montag
[1]|04-10-2016|Dienstag
[2]|05-10-2016|Mittwoch
[3]|06-10-2016|Donnerstag
[4]|07-10-2016|Freitag
[5]|08-10-2016|Samstag
[6]|09-10-2016|Sonntag

 

1 person likes this

Share this post


Link to post
Share on other sites

#8 ·  Posted

Hi,

the german Date is NOT ok!

Zwischenablage01.jpg

29 minutes ago, czardas said:

You should get an array with a column of dates in your local format

The local (german) date Format has a dot instead of a minus sign.

18.10.2016 

In the Date-Control inside the GUI the date is shown in the right format...

Zwischenablage02.jpg

 

 

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

Thanks @Andy G, I know about that. The locale output delimiter is currently being overridden by a personal preference option which will change once I create the program settings panel. The program will eventually assume locale settings on the very first run, and after that  - whatever output format the user prefers. Perhaps I ought to have mentioned this.

Edited by czardas

Share this post


Link to post
Share on other sites

#10 ·  Posted

thx for the information, your script works fine :thumbsup:

1 person likes this

Share this post


Link to post
Share on other sites

#11 ·  Posted

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

I think you should display it phonetically if it detects you are from the southern U.S., liverpool, or @TheSaint.

Edited by iamtheky

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Share this post


Link to post
Share on other sites

#13 ·  Posted

1 hour ago, czardas said:

If it works in China, that would make me happy.

Unfortunately I can only confirm that in Poland this works ok.

 

 

1 person likes this

NEW:     ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button:

Spoiler

Last update: 2016-11-12
Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft Components * TeamViewer API -UDF * JavaManagement UDF * VIES over SOAPPOP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF * WinSCP UDF *

My contribution to others projects: * _sql.au3 UDF  *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities *

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, The Art of Computer Programming
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

 

Share this post


Link to post
Share on other sites

#14 ·  Posted

@iamtheky, Do you get an empty element in Texas like JLogan3o13? I'm puddled by this. I thought perhaps it was something in _DateIsLeapYear() that doesn't like a particular locale. How can an element be there when it is deleted in line 345:

ReDim $aTimeLine[$iCount +1] ; get rid of unused elements

I'm clueless!

Share this post


Link to post
Share on other sites

#15 ·  Posted

I will try his selections and report back.

1 person likes this

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Share this post


Link to post
Share on other sites

#16 ·  Posted (edited)

Row|Col 0|Col 1
[0]|01-1976-01|Thursday
[1]|02-1976-01|Friday
[2]|03-1976-01|Saturday
[3]|04-1976-01|Sunday
[4]|05-1976-01|Monday
[5]|06-1976-01|Tuesday
[6]|07-1976-01|Wednesday
[7]|08-1976-01|Thursday
[8]|09-1976-01|Friday
[9]|10-1976-01|Saturday
[10]|11-1976-01|Sunday
[11]|12-1976-01|Monday
[12]|13-1976-01|Tuesday
[13]|14-1976-01|Wednesday
[14]|15-1976-01|Thursday
[15]|16-1976-01|Friday
[16]|17-1976-01|Saturday
[17]|18-1976-01|Sunday
[18]|19-1976-01|Monday
[19]|20-1976-01|Tuesday
[20]|21-1976-01|Wednesday

...

[14819]|28-2016-07|Thursday
[14820]|29-2016-07|Friday
[14821]|30-2016-07|Saturday
[14822]|31-2016-07|Sunday
[14823]|01-2016-08|Monday
[14824]|02-2016-08|Tuesday
[14825]|03-2016-08|Wednesday
[14826]|04-2016-08|Thursday
[14827]|05-2016-08|Friday
[14828]|06-2016-08|Saturday
[14829]|07-2016-08|Sunday
[14830]|08-2016-08|Monday
[14831]|09-2016-08|Tuesday
[14832]|10-2016-08|Wednesday
[14833]|11-2016-08|Thursday
[14834]|12-2016-08|Friday
[14835]|13-2016-08|Saturday
[14836]|14-2016-08|Sunday
[14837]|15-2016-08|Monday
[14838]|16-2016-08|Tuesday
[14839]|17-2016-08|Wednesday
[14840]|18-2016-08|Thursday
[14841]|19-2016-08|Friday
[14842]|20-2016-08|Saturday
[14843]|21-2016-08|Sunday
[14844]|22-2016-08|Monday
[14845]|23-2016-08|Tuesday
[14846]|24-2016-08|Wednesday
[14847]|25-2016-08|Thursday
[14848]|26-2016-08|Friday
[14849]|27-2016-08|Saturday
[14850]|28-2016-08|Sunday
[14851]|29-2016-08|Monday
[14852]|30-2016-08|Tuesday
[14853]|31-2016-08|Wednesday
[14854]|01-2016-09|Thursday
[14855]|02-2016-09|Friday
[14856]|03-2016-09|Saturday
[14857]|04-2016-09|Sunday
[14858]|05-2016-09|Monday
[14859]|06-2016-09|Tuesday
[14860]|07-2016-09|Wednesday
[14861]|08-2016-09|Thursday
[14862]|09-2016-09|Friday
[14863]|10-2016-09|Saturday
[14864]|11-2016-09|Sunday
[14865]|12-2016-09|Monday
[14866]|13-2016-09|Tuesday
[14867]|14-2016-09|Wednesday
[14868]|15-2016-09|Thursday
[14869]|16-2016-09|Friday
[14870]|17-2016-09|Saturday
[14871]|18-2016-09|Sunday
[14872]|19-2016-09|Monday
[14873]|20-2016-09|Tuesday
[14874]|21-2016-09|Wednesday
[14875]|22-2016-09|Thursday
[14876]|23-2016-09|Friday
[14877]|24-2016-09|Saturday
[14878]|25-2016-09|Sunday
[14879]|26-2016-09|Monday
[14880]|27-2016-09|Tuesday
[14881]|28-2016-09|Wednesday
[14882]|29-2016-09|Thursday
[14883]|30-2016-09|Friday
[14884]|01-2016-10|Saturday
[14885]|02-2016-10|Sunday
[14886]|03-2016-10|Monday
[14887]|04-2016-10|Tuesday
[14888]|05-2016-10|Wednesday
[14889]|06-2016-10|Thursday
[14890]|07-2016-10|Friday
[14891]|08-2016-10|Saturday
[14892]|09-2016-10|Sunday
[14893]|10-2016-10|Monday
[14894]|11-2016-10|Tuesday
[14895]|12-2016-10|Wednesday
[14896]|13-2016-10|Thursday
[14897]|14-2016-10|Friday
[14898]|15-2016-10|Saturday
[14899]|16-2016-10|Sunday
[14900]|17-2016-10|Monday
[14901]|18-2016-10|Tuesday
[14902]|19-2016-10|Wednesday
[14903]|20-2016-10|Thursday

 

 

2/26/1976 - 3.5 years prior to the greatest day in history - 10/20/2016:  everything looks fine here.

Day-Year-Month is not the way any US folk write dates, most write MMDDYYYY.  Slashes or Dashes.

Edit:  Also, it started from Jan. 1 1976 eventhough i selected 2/26, that seems odd, no?  I did select use long names if that changes behaviors.

Edited by iamtheky
1 person likes this

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Share this post


Link to post
Share on other sites

#17 ·  Posted (edited)

Thanks again. I wonder if @JLogan3o13's results are AutoIt version related. The element that appears empty should have either been written to, or deleted from, the array. The day names are added using Mod(index, 7) regardless of the data in the first column. It's odd that this bug doesn't seem to be effecting anyone else. The array gets reversed if the start date is later than the end date, so the empty element will either appear at the end or at the start accordingly.

Edited by czardas

Share this post


Link to post
Share on other sites

#18 ·  Posted (edited)

44 minutes ago, iamtheky said:

it started from Jan. 1 1976 eventhough i selected 2/26, that seems odd, no?

I think that's something to do with the month calendar behaviour. You must have somehow only clicked the year or something. It reads the start date directly from the control.

@iamtheky, The DDYYYYMM order must be wrong though. I need to check the regexp generation. Thanks!

Edited by czardas

Share this post


Link to post
Share on other sites

#19 ·  Posted

26-12-2016|maandag
27-12-2016|dinsdag
28-12-2016|woensdag
29-12-2016|donderdag
30-12-2016|vrijdag
31-12-2016|zaterdag
|zondag

so in general fine in dutch but weird is the last one having no date

Share this post


Link to post
Share on other sites

#20 ·  Posted

Just as an FYI, I am on 3.3.14.2 on the Win7 box and 3.3.12.0 stable and 3.3.13.19 Beta on the Win10 box. I ran it on the Beta just for grins, but got the same results.

And yes, I just noticed it starts from January 1 even with the date of 2/26. 


When you're dead, you don't know you're dead - it's only difficult for those that know you. It's the same way when you're stupid...

My Scripts: SCCM UDFInclude Source with Compiled Script, Windows Firewall UDF

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • MrCheese
      Date control
      By MrCheese
      Hi guys,
       
      I have some code; which doesn't quite work.
      $dateStop = "11302015" $tDate = _Date_Time_GetSystemTime() $currentdatestring = _Date_Time_SystemTimeToDateStr($tDate) If $currentdatestring >= $dateStop Then MsgBox(0, "Expired", "Script has expired.") Exit EndIf  
      Basically, I want to essentially put an expiry date on the script.
       
      Where in the example above, it is 30th November 2015.
       
      Sometimes it works, sometimes it doesn't. 
      I may have the string wrong, I may have the code all wrong.
       
      I thought about using the macro @mon @year etc but it gets quite conditional.
      i.e. if its 2015, but October, or if its 2015 and Dec, or if its March 2016 etc.
       
      But simplicity is great. Any help would be awesome.
       
    • Chiitus
      Regex date
      By Chiitus
      Hello guys, i have a problem in this regex because its not groupping right.
      Look:
      (\d{1,2}\s?[\055|\056|\057|\134]\s?\d{1,2}(\s?[\055|\056|\057|\134]\s?\d{2,4})?) It checks for day or dayday, month or monthmonth, yearyear or yearyearyear+year.
      separated with or without space and the characters "\/.-"
      But, a problem! I tried to regex the date with or without the "separator + year" Eg: 05/05 or 05/05/05, but when i have 05/05/05, regex are separating 05/05 and /05
      Iam using group "()" wrong?
      Need help here
      Thx adv!
      ~~EDIT:
      Script used: (from autoitscript.com/forum/topic/129697-split-string-by-regular-expression/#comment-901335)
      #include <Array.au3> Local $sString = ClipGet() ; Extract the delimiters $aDelim = StringRegExp($sString, '(\d{1,2}\s?[\055|\056|\057|\134]\s?\d{1,2}(\s?[\055|\056|\057|\134]\s?\d{2,4})?)', 3) ; Split the string on the delimiters $aParts = StringSplit(StringRegExpReplace($sString, '(\d{1,2}\s?[\055|\056|\057|\134]\s?\d{1,2}(\s?[\055|\056|\057|\134]\s?\d{2,4})?)', "$<SEPARATOR>$"), "$<SEPARATOR>$", 3) ; Add the delimter to the start of the part For $i = 0 To UBound($aParts) - 1 ;$aParts[$i + 1] = $aDelim[$i] & $aParts[$i + 1] Next ; Set the count $aParts[0] = UBound($aParts) ; Display the result _ArrayDisplay($aParts) _ArrayDisplay($aDelim) Results in array: (the array parts in all string is ok; but the string delimitator himself is getting separated in every string that have year together)

      String used as test:
      Cheers.
    • Vivaed
      Parse time from each line of log (text file)
      By Vivaed
      I have another AutoIT script making a Log file 

      Sample of Log file:
      2016/08/22 12:44:18 > Process: [RUNNING] [ACTIVE] 2016/08/22 12:48:35 > Process: [WAS NOT RUNNING] 2016/08/22 13:40:00 > Process: [FAILED] 2016/08/22 14:01:10 > Process: [WAS NOT RUNNING] I am looping through the Log file for  the word "FAILED"
      I then want to get all lines that have "FAILED" and get their TIME
       
      My Current code to get this far:
      If FileExists($fileLog) Then $contents = FileRead($fileLog) If @error Then MsgBox(0, 'File Error', $fileLog & ' could not be read.') Else For $i = 1 To _FileCountLines($fileLog) $result = StringInStr($contents,$search) If $result >= 1 Then $filteredLine = FileReadLine($fileLog,$i) If StringInStr($filteredLine,$search) Then ConsoleWrite($filteredLine & @CRLF) ; this gets me the results I want sans the time parse EndIf Else ConsoleWrite( $search & " not found!" & @CRLF) EndIf Next EndIf EndIf For this part:
      If StringInStr($filteredLine,$search) Then ConsoleWrite($filteredLine & @CRLF) ; this gets me the results I want sans the time parse EndIf OUTPUT: 2016/08/22 13:40:00 > Process: [FAILED] I dont understand how I read the time in that output?
       
      I have tried _DateTimeFormat - Dont think this applies 
      Tried _DateDiff - I dont have a the date yet so this doesnt work
       
      Would love if someone could tell me if I am thinking is the wrong direction and possibly lead me down the correct path to light side of the force  

       
    • SalamanderSoup
      Capture Screenshot using snipping tool
      By SalamanderSoup
      I've created a simple script that opens the Snipping Tool; Selects the "Full Screen Snip" option; then closes the program, prompting a save.  What I can't figure is how to name the file using the system date and time.
      Can anyone help?
      Run(@WindowsDir & '\system32\SnippingTool.exe') AutoItSetOption('MouseCoordMode', 0) Sleep(1) $hWnd= WinWait("Snipping Tool", "ToolBarWindow32", 1) WinActive($hWnd) MouseClick('primary', 84, 48, 1, 0) MouseClick('primary', 84, 140, 1, 0) WinClose("[Class:Microsoft-Windows-Tablet-SnipperEditor]") ControlClick("Snipping Tool", "", "Button1")  
       
       
       
    • Altor
      How i can compare two dates?
      By Altor
      Hi to all
      My problem is how can I compare two dates
      if I have the following code:
      $date = _NowDate() $dateend = "10/12/2016" if $date > $dateend Then Exit EndIf It does not work well
      I guess it's because I'm comparing two strings not realy two dates.
      My idea would break the date into three numbers year, month and day and go comparing data as numbers.
      is this correct...?
      Thank's to all