Что нового

Нужен пример сортировки дат по формату DD.MM.YY

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Как рассортировать огромное кол-во дат по возрастанию в формате DD.MM.YY

К примеру:
01.01.10 (1 января 2010)
21.11.09
21.02.10

их нужно рассортировать (неважно куда, главное рассортировать :smile: )

в любом направлении Убывание или Возрастание
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Нужно формат DD.MM.YY перевести в YY.MM.DD, а потом _ArraySort
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sforce5
У меня так отсортировать по возрастанию получилось:
Код:
#include <file.au3>
#include <Array.au3>
#include <date.au3>

Dim $avArray
_FileReadToArray("1.txt", $avArray)
_ArrayDisplay($avArray)
For $i = 1 To UBound($avArray) - 1
	$iDay = StringLeft($avArray[$i], 2)
	$iYear = StringRight($avArray[$i], 4)
	$iMonth = StringMid($avArray[$i], 4, 2)
	$avArray[$i] = _DateToDayValue($iYear, $iMonth, $iDay )
Next
_ArraySort($avArray, 0, 1)
For $i = 1 To UBound($avArray) - 1
	_DayValueToDate($avArray[$i],$iYear, $iMonth, $iDay)
	$avArray[$i] = $iDay & "." & $iMonth & "." & $iYear
Next
_ArrayDisplay($avArray)
_FileWriteFromArray("2.txt", $avArray, 1)

1.txt
Код:
24.02.2010
25.02.2010
26.02.2010
27.02.2010
28.02.2010
01.03.2009
02.03.2010
22.02.2010
23.02.2009
21.02.2010
2.txt
Код:
23.02.2009
01.03.2009
21.02.2010
22.02.2010
24.02.2010
25.02.2010
26.02.2010
27.02.2010
28.02.2010
02.03.2010
Если в формате ДД.ММ.ГГ., то надо 2 строки поменять
Код:
$iYear = StringRight($avArray[$i], 4)
;на
$iYear = "20" & StringRight($avArray[$i], 2)
;и
$avArray[$i] = $iDay & "." & $iMonth & "." & $iYear
; на
$avArray[$i] = $iDay & "." & $iMonth & "." & StringRight($iYear, 2)

Если надо сортировать по убыванию, то надо поменять:
Код:
_ArraySort($avArray, 0, 1)
; на
_ArraySort($avArray, 1, 1)

Скрипт у меня работает только в 21 веке :smile:. Если поменять
Код:
$iYear = "20" & StringRight($avArray[$i], 2)
;на
$iYear = StringRight($avArray[$i], 2)
If $iYear < 50 Then
	$iYear = "20" & StringRight($avArray[$i], 2)
Else
	$iYear = "19" & StringRight($avArray[$i], 2)
EndIf
То сортирует с 1950 по 2049 годы.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Мне кажется логичнее использовать функцию _Date_Time_CompareFileTime().

;)
 
Верх