Что нового

[Время, дата] Указать диапазон даты, сделать операцию начиная "с" и заканчивая "до"

scanfail

Знающий
Сообщения
244
Репутация
17
Здравствуйте господа.
Не уверен, правильно ли стала понятна суть вопроса по название темы, ну да ладно, сейчас попробую объяснить еще лучше.
Есть сайт на котором хранятся нужные мне данные, а данные эти, нужные мне, обновляются каждый день.
Хранятся эти данные в .xml, т.е., ссылка выглядит так: /12.04.2017.xml.
Написать скрипт, который читал бы нужные мне данные за определенную дату с этой страницы не составило труда, банальное Input(@MDAY & "." & @MON & "." & @YEAR)+InetRead+BinaryToString+_StringBetween.

Так вот, сейчас встала другая задача:
Нужно бы добавить еще один Input, в итоге у меня будет два Input-а, первый будет дата "С", второй дата "ДО".
Далее, нужно сделать так, чтобы скрипт посчитал количество дней в диапазоне и собрал всю информацию за заданный диапазон "С" и "ДО".
Как реализовать подсчет и количество операций "С" и "ДО" я к сожалению не знаю...
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
InnI сказал(а):
scanfail
чтобы скрипт посчитал количество дней в диапазоне
Код:
_DateDiff()
Спасибо за ответ, но это не совсем то, я видимо попросту неправильно донес свою мысль.

Пример:
1. В скрипте выбрана дата "C" - 01.01.2001.
2. В скрипте выбрана дата "До" - 10.01.2001
3. Скрипт рассчитывает все, выходит:
01.01.2001
02.01.2001
03.01.2001
04.01.2001
05.01.2001
06.01.2001
07.01.2001
08.01.2001
09.01.2001
10.01.2001
4. Скрипт начинает брать по-очереди, начиная с первой даты, дату и подставляет её в .xml ссылку, откуда берет нужные мне данные.

Вот на третьем этапе я и сталкиваюсь с проблемой, не знаю как все это реализовать, чтобы скрипт все правильно рассчитывал и правильно подставлял даты в ссылку по-очереди.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
#include <Date.au3>

Local $dateOt = '2001/01/01'
Local $dateDo = '2001/01/10'

Local $deltaD = _DateDiff('D', $dateOt, $dateDo)

Local $aDays[$deltaD + 1]
For $i = 0 To $deltaD
	$aDays[$i] = _DateAdd('D', $i, $dateOt)
Next

For $i = 0 To UBound($aDays) - 1
	$link = 'http://example.com/' & _format($aDays[$i]) & '.xml'
	MsgBox(0, 'Скачайте ссылку', $link)
Next

Func _format($dateIn)
	Local $aSplit = StringSplit($dateIn, '/', 2)
	Return $aSplit[2] & '.' & $aSplit[1] & '.' & $aSplit[0]
EndFunc
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
inververs сказал(а):
Код:
#include <Date.au3>

Local $dateOt = '2001/01/01'
Local $dateDo = '2001/01/10'

Local $deltaD = _DateDiff('D', $dateOt, $dateDo)

Local $aDays[$deltaD + 1]
For $i = 0 To $deltaD
	$aDays[$i] = _DateAdd('D', $i, $dateOt)
Next

For $i = 0 To UBound($aDays) - 1
	$link = 'http://example.com/' & _format($aDays[$i]) & '.xml'
	MsgBox(0, 'Скачайте ссылку', $link)
Next

Func _format($dateIn)
	Local $aSplit = StringSplit($dateIn, '/', 2)
	Return $aSplit[2] & '.' & $aSplit[1] & '.' & $aSplit[0]
EndFunc

Спасибо большое за ответ! А можно ли скрипт как-то приспособить под этот формат?

Код:
$DatetFrom = GUICtrlCreateDate(_NowDate(), 22, 6, 75, 20, $DTS_SHORTDATEFORMAT) ;12.04.2017
$DateTo = GUICtrlCreateDate(_NowDate(), 120, 6, 75, 20, $DTS_SHORTDATEFORMAT) ;12.04.217
 
A

Alofa

Гость
scanfail сказал(а):
... А можно ли скрипт как-то приспособить...
Наверно тут за вас все нужно сделать.
Код:
#include <Array.au3>
#include <Date.au3>
#include <GUIConstantsEx.au3>

Local $iStart, $iStop, $iButton, $DateStart, $DateStop, $iValToAdd, $iUb
GUICreate("", 200, 200)
GUICtrlCreateLabel('С' & @CR & @CR & 'До', 30, 55, 25, 100)
$iStart = GUICtrlCreateDate("", 60, 50, 100, 20, $DTS_SHORTDATEFORMAT)
$iStop = GUICtrlCreateDate("", 60, 80, 100, 20, $DTS_SHORTDATEFORMAT)
$iButton = GUICtrlCreateButton('Ok', 50, 130, 100)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $iButton
			$DateStart = StringRegExpReplace(GUICtrlRead($iStart), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			$DateStop = StringRegExpReplace(GUICtrlRead($iStop), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			Local $aDates[1] = ['http://example.com/' & _DateTimeFormat($DateStart, 2) & '.xml']
			If $DateStart <> $DateStop Then
				$iValToAdd = (_DateDiff('D', $DateStart, $DateStop) > 0) ? 1 : -1
				While 1
					$iUb = UBound($aDates)
					ReDim $aDates[$iUb + 1]
					$aDates[$iUb] = _DateAdd('D', $iValToAdd, $DateStart)
					$DateStart = $aDates[$iUb]
					$aDates[$iUb] = 'http://example.com/' & _DateTimeFormat($aDates[$iUb], 2) & '.xml'
					If $DateStart = $DateStop Then ExitLoop
				WEnd
			EndIf
			_ArrayDisplay($aDates)
	EndSwitch
WEnd
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Alofa сказал(а):
scanfail сказал(а):
... А можно ли скрипт как-то приспособить...
Наверно тут за вас все нужно сделать.
Код:
#include <Array.au3>
#include <Date.au3>
#include <GUIConstantsEx.au3>

Local $iStart, $iStop, $iButton, $DateStart, $DateStop, $iValToAdd, $iUb
GUICreate("", 200, 200)
GUICtrlCreateLabel('С' & @CR & @CR & 'До', 30, 55, 25, 100)
$iStart = GUICtrlCreateDate("", 60, 50, 100, 20, $DTS_SHORTDATEFORMAT)
$iStop = GUICtrlCreateDate("", 60, 80, 100, 20, $DTS_SHORTDATEFORMAT)
$iButton = GUICtrlCreateButton('Ok', 50, 130, 100)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $iButton
			$DateStart = StringRegExpReplace(GUICtrlRead($iStart), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			$DateStop = StringRegExpReplace(GUICtrlRead($iStop), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			Local $aDates[1] = ['http://example.com/' & _DateTimeFormat($DateStart, 2) & '.xml']
			If $DateStart <> $DateStop Then
				$iValToAdd = (_DateDiff('D', $DateStart, $DateStop) > 0) ? 1 : -1
				While 1
					$iUb = UBound($aDates)
					ReDim $aDates[$iUb + 1]
					$aDates[$iUb] = _DateAdd('D', $iValToAdd, $DateStart)
					$DateStart = $aDates[$iUb]
					$aDates[$iUb] = 'http://example.com/' & _DateTimeFormat($aDates[$iUb], 2) & '.xml'
					If $DateStart = $DateStop Then ExitLoop
				WEnd
			EndIf
			_ArrayDisplay($aDates)
	EndSwitch
WEnd
Спасибо! Подключил к своему скрипту, столкнулся с проблемой. У меня все данные добавляет в ListView и при начинание работы скрипта, если дата выбрана 01.~.~, он почему-то начинает с 02.~.~.


Добавлено:
Сообщение автоматически объединено:

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <DateTimeConstants.au3>
#include <Date.au3>
#include <GUIListView.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <Array.au3>

#Region ### GUI section ###
$FormCBAR = GUICreate("Курс", 320, 230, -1, -1)
$LabelFrom = GUICtrlCreateLabel("С", 10, 10, 11, 17)
$DateFrom = GUICtrlCreateDate(_NowDate(), 22, 6, 75, 20, $DTS_SHORTDATEFORMAT)
$LabelTo = GUICtrlCreateLabel("по", 102, 10, 15, 15)
$DateTo = GUICtrlCreateDate(_NowDate(), 120, 6, 75, 20, $DTS_SHORTDATEFORMAT)
$ListViewCurrency = GUICtrlCreateListView("||||", 8, 32, 300, 158)
_GUICtrlListView_SetColumn($ListViewCurrency, 0, "Дата", 74, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 1, "Доллар", 68, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 2, "Евро", 68, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 3, "Рубль", 68, 2)
$ButtonGetCurrency = GUICtrlCreateButton("Получить", 200, 3, 108, 25)
$ButtonOpenExcel = GUICtrlCreateButton("Открыть в Excel", 7, 195, 285, 25)
GUISetState(@SW_SHOW)
#EndRegion ### GUI section ###

While 1
    Switch GUIGetMsg()
	Case $GUI_EVENT_CLOSE
            ExitLoop
		Case $ButtonGetCurrency
			$ReadDateFrom = StringRegExpReplace(GUICtrlRead($DateFrom), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			$ReadDateTo = StringRegExpReplace(GUICtrlRead($DateTo), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			Local $aDates[1] = ['https://www.example.com/currencies/' & _DateTimeFormat($ReadDateFrom, 2) & '.xml']
			$iValToAdd = (_DateDiff('D', $ReadDateFrom, $ReadDateTo) > 0) ? 1 : -1
			While 1
				Sleep(1000)
				$iUb = UBound($aDates)
				ReDim $aDates[$iUb + 1]
				$aDates[$iUb] = _DateAdd('D', $iValToAdd, $ReadDateFrom)
				$ReadDateFrom = $aDates[$iUb]
				$aDates[$iUb] = BinaryToString(InetRead('https://www.example.com/currencies/' & _DateTimeFormat($aDates[$iUb], 2) & '.xml'))
				$CurrencyUSD = _StringBetween($aDates[$iUb], '<Name>USD</Name><Value>', '</Value>')
				$CurrencyEUR = _StringBetween($aDates[$iUb], '<Name>EUR</Name><Value>', '</Value>')
				$CurrencyRUB = _StringBetween($aDates[$iUb], '<Name>RUB rublu</Name><Value>', '</Value>')
				$ListViewCurrencyColumnItemCount = GUICtrlCreateListViewItem("||||", $ListViewCurrency)
				GUICtrlSetData($ListViewCurrencyColumnItemCount, $ReadDateFrom )
				GUICtrlSetData($ListViewCurrencyColumnItemCount, "|" & $CurrencyUSD[0])
				GUICtrlSetData($ListViewCurrencyColumnItemCount, "||" & $CurrencyEUR[0])
				GUICtrlSetData($ListViewCurrencyColumnItemCount, "|||" & $CurrencyRUB[0])
				If $ReadDateFrom = $ReadDateTo Then ExitLoop
			WEnd
    EndSwitch
WEnd
 
A

Alofa

Гость
OffTopic:
Так наверно (сайт-то вы не дали):
Код:
#include <GUIConstantsEx.au3>
#include <Date.au3>
#include <GUIListView.au3>
#include <String.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1) ; Полезно

Local $FormCBAR = GUICreate("Курс", 320, 230, -1, -1)
Local $LabelFrom = GUICtrlCreateLabel("С", 10, 10, 11, 17)
Local $DateFrom = GUICtrlCreateDate('', 22, 6, 75, 20, $DTS_SHORTDATEFORMAT)
Local $LabelTo = GUICtrlCreateLabel("по", 102, 10, 15, 15)
Local $DateTo = GUICtrlCreateDate('', 120, 6, 75, 20, $DTS_SHORTDATEFORMAT)
Local $ListViewCurrency = GUICtrlCreateListView("||||", 8, 32, 300, 158)
_GUICtrlListView_SetColumn($ListViewCurrency, 0, "Дата", 74, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 1, "Доллар", 68, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 2, "Евро", 68, 2)
_GUICtrlListView_SetColumn($ListViewCurrency, 3, "Рубль", 68, 2)
Local $ButtonGetCurrency = GUICtrlCreateButton("Получить", 200, 3, 108, 25)
Local $ButtonOpenExcel = GUICtrlCreateButton("Открыть в Excel", 7, 195, 285, 25)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $ButtonGetCurrency
			Local $sDates, $ReadDateFrom, $ReadDateTo, $iDateDiff, $iStep, $ListViewCurrencyColumnItemCount
			Local $aCurrValue, $aCurrency[3][2] = [['USD', '|'], ['EUR', '||'], ['RUB rublu', '|||']]
			$ReadDateFrom = StringRegExpReplace(GUICtrlRead($DateFrom), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			$ReadDateTo = StringRegExpReplace(GUICtrlRead($DateTo), '(\d+)\.(\d+)\.(\d+)', '$3/$2/$1')
			$iDateDiff = _DateDiff('D', $ReadDateFrom, $ReadDateTo)
			$iStep = ($iDateDiff > 0) ? 1 : -1
			For $i = 0 To $iDateDiff Step $iStep
				Sleep(1000)
				$sDates = BinaryToString(InetRead('https://www.example.com/currencies/' & _DateTimeFormat(_DateAdd('D', $i, $ReadDateFrom), 2) & '.xml'))
				If @error Then ContinueLoop
				$ListViewCurrencyColumnItemCount = GUICtrlCreateListViewItem("||||", $ListViewCurrency)
				GUICtrlSetData($ListViewCurrencyColumnItemCount, $ReadDateFrom)
				For $j = 0 To 2
					$aCurrValue = _StringBetween($sDates, '<Name>' & $aCurrency[$j][0] & '</Name><Value>', '</Value>')
					If $aCurrValue Then GUICtrlSetData($ListViewCurrencyColumnItemCount, $aCurrency[$j][1] & $aCurrValue[0])
				Next
			Next
	EndSwitch
WEnd


Возникнут вопросы - создавайте новую тему в Столе заказов.



Добавлено:
Сообщение автоматически объединено:

OffTopic:
C этим:
Код:
Sleep(1000)
; и
InetRead()

вам нужно использовать режим "OnEvent", для того чтобы кнопки реагировали после нажатия "$ButtonGetCurrency".
 
Верх