Что нового

Как получит интервалы времени, которые находятся между интервалами

StarEdik

Новичок
Сообщения
365
Репутация
4
Привет всем!!!
Поздравляю всех с наступающим новым годом. Особенно всех своих близких мне модераторов, в лице Garrett, а также всех друзей Форумчан. Желаю всем вам всего самого наилучшего, успехов во всем и крепкого здоровья, будьте счастливы!
Скорблю и помню madmasles. :(

А теперь просьба.
Помогите мне при написании скрипта.
Имеется интервалы времени.
1.01.2007 0:10 - 2.01.2007 19:12
----------------------------------------------
5.01.2007 19:35 - 9.01.2007 22:50
-----------------------------------------------
13.01.2007 5:01 - 18.01.2007 10:33

Нужно получит из этого списка интервалы времени , которые находятся между этими интервалами (красные пунктиры)

2.01.2007 19:13 - 5.01.2007 19:34
9.01.2007 22:51 - 13.01.2007 5:00

А полученный список сохранить в другой файл. Файл- пример с интервалами 1.txt во вложении
 

Вложения

  • 1.txt
    624 байт · Просмотры: 10

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
К первой дате прибавить минуту, от второй отнять.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
inververs
Спасибо, а примером скрипта поможете?
 

inververs

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

; Добавит 5 дней к сегодняшнему дню
$sNewDate = _DateAdd( 'd',5, _NowCalcDate())
MsgBox( 4096, "", "Сегодня + 5 дней:" & $sNewDate )

; Вычтет 2 недели из сегодняшнего дня
$sNewDate = _DateAdd( 'w',-2, _NowCalcDate())
MsgBox( 4096, "", "Сегодня минус 2 недели: " & $sNewDate )

; Добавит 15 минут к текущему времени
$sNewDate = _DateAdd( 'n',15, _NowCalc())
MsgBox( 4096, "", "Текущее время +15 минут: " & $sNewDate )

; Вычислит дату лога событий, который хранит секунды с 1970/01/01 00:00:00
$sNewDate = _DateAdd( 's',1087497645, "1970/01/01 00:00:00")
MsgBox( 4096, "", "Дата: " & $sNewDate )
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
А как в цикле вес файл обработать?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Возможно Вы имели в виду сколько времени прошло между интересующими Вас интервалами, тогда, можно так
Код:
#include <File.au3>
#include <array.au3>
#include <Date.au3>

Dim $Array
$FilePath=FileOpenDialog('Выберите файл',@ScriptDir,'Текстовый файл(*.txt)')
_FileReadToArray($FilePath, $Array)
Dim $ArrayTime[UBound($Array)-2]
For $i=2 to UBound($Array)-1
	$LTime=StringSplit($Array[$i-1],'-')
	$LastData=_FormatDate($LTime[2])

	$PTime=StringSplit($Array[$i],'-')
	$PresentData=_FormatDate($PTime[1])

	$ArrayTime[$i-2]=$PTime[1]&' - '&$LTime[2]&' прошло '&_DateDiff('n',$LastData,$PresentData)&' минут'

Next

_FileCreate(@ScriptDir&'/результат.txt')
$RezFile=FileOpen(@ScriptDir&'/результат.txt',2)
_FileWriteFromArray($RezFile,$ArrayTime)
FileClose($RezFile)

Func _FormatDate($Dt)
 $DateTime=StringSplit($Dt,' ')
 ;Удаление лишних и пустых значений из массива
 _ArrayDelete($DateTime, 0)
 For $i = UBound($DateTime, 1) - 1 To 0 Step -1
    If $DateTime[$i] = "" Then _ArrayDelete($DateTime, $i)
 Next

 $Date=StringSplit($DateTime[0],'.')

Return $Date[3]&'/'&$Date[2]&'/'&$Date[1]&' '&$DateTime[1]

EndFunc

Создаётся файл "результат.txt" в котором записаны интервалы времени в минутах между второй датой в строке и первой в следующей строке. Значение интервала ( минуты, секунды, часы, дни итд) можно изменить, заменив соответсвующий ключ в функции
Код:
_DateDiff
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Нужен скрипт который получит из файла 1.txt интервалы времени , которые находятся между этими интервалами
Пример, это фрагмент из файла 1.txt
1.01.2007 0:10 - 2.01.2007 19:12
5.01.2007 19:35 - 9.01.2007 22:50
13.01.2007 5:01 - 18.01.2007 10:33

Из этого файла после обработки
inververs сказал(а):
К первой дате прибавить минуту, от второй отнять.
должны получит файл "результат.txt" в котором записаны интервалы времени
2.01.2007 19:13 - 5.01.2007 19:34
9.01.2007 22:51 - 13.01.2007 5:00
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Тогда так
Код:
#include <File.au3>
#include <array.au3>
#include <Date.au3>

Dim $Array
$FilePath=FileOpenDialog('Выберите файл',@ScriptDir,'Текстовый файл(*.txt)')
_FileReadToArray($FilePath, $Array)
Dim $ArrayTime[UBound($Array)-2]
For $i=2 to UBound($Array)-1
    $LTime=StringSplit($Array[$i-1],'-')
    $LastData=_FormatDate($LTime[2])

    $PTime=StringSplit($Array[$i],'-')
    $PresentData=_FormatDate($PTime[1])


   $ArrayTime[$i-2]=StringRegExpReplace(_DateAdd('n',1,$LastData), '(\d{4})/(\d{2})/(\d{1,2})', ' $3.$2.$1 ')&' - '&StringRegExpReplace(_DateAdd('n',-1,$PresentData), '(\d{4})/(\d{2})/(\d{1,2})', ' $3.$2.$1 ')

Next

_FileCreate(@ScriptDir&'/результат.txt')
$RezFile=FileOpen(@ScriptDir&'/результат.txt',2)
_FileWriteFromArray($RezFile,$ArrayTime)
FileClose($RezFile)

Func _FormatDate($Dt)
 $DateTime=StringSplit($Dt,' ')
 ;Удаление лишних и пустых значений из массива
 _ArrayDelete($DateTime, 0)
 For $i = UBound($DateTime, 1) - 1 To 0 Step -1
    If $DateTime[$i] = "" Then _ArrayDelete($DateTime, $i)
 Next

 $Date=StringSplit($DateTime[0],'.')

Return $Date[3]&'/'&$Date[2]&'/'&$Date[1]&' '&$DateTime[1]

EndFunc
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
ra4o
Большое Человеческое Спасибо! Респект и уважение всем, кто принял участие в решении данной просьбы. :ok: +1
 
Верх