Что нового

Как упорядочить интервалы по промежутку времени, соответствующему крайним значен

Статус
Закрыто для дальнейших ответов.

StarEdik

Новичок
Сообщения
365
Репутация
4
Привет всем. Прощу помощи при написании скрипта.
Имеется файл 1.txt с временными интервалами. В этом файле заданные интервалы времени иногда перекрывают друг друга. Надо из файла 1.txt, составит интервалы по промежутку времени, соответствующему крайним значениям этих интервалов. А полученный результат сохранит в отдельный файл - Результат.txt. За ранее благодарю за помощь. Файл 1.txt во вложении
ТО ЕСТЬ
Из этих интервалов
19.11.2011 20:10 - 21.11.2011 11:17
21.11.2011 01:42 - 21.11.2011 03:22
22.11.2011 10:10 - 22.11.2011 15:14
22.11.2011 20:10 - 25.11.2011 20:40
24.11.2011 19:50 - 27.11.2011 23:20
25.11.2011 11:34 - 29.11.2011 01:47
26.11.2011 01:40 - 28.11.2011 14:20
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20

должны получить
19.11.2011 20:10 - 21.11.2011 11:17
22.11.2011 10:10 - 22.11.2011 15:14
22.11.2011 20:10 - 30.11.2011 04:20
 

Вложения

  • 1.txt
    5.9 КБ · Просмотры: 10
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Ребята, от madmasles у меня такая функция остался. Может пригодиться для моего вопроса. Помогите ПЛЗ. У меня ничего не получается :stars:
Функция _CheckFile($s_File) проверяет файл на следующие условия:
1. В каждой строке есть дата и время начала и конца периода.
2. Дата и время начала раньше, чем дата и время конца периода.
3. Дата начала следующего периода позже, чем дата конца предыдущего.
Код:
#include <Date.au3>

Local $s_File = @ScriptDir & '\1.txt', $s_Text

$s_Text = _CheckFile($s_File)

While 1
Sleep(100)
WEnd

Func _CheckFile($s_File)
    Local $s_Text, $a_Temp, $a_TempString, $a_Array[1][2]

    $s_Text = FileRead($s_File)

    $s_Text = StringRegExpReplace($s_Text, '([\r\n]*$)', '')

    $a_Temp = StringSplit(StringStripCR($s_Text), @LF)

    ReDim $a_Array[$a_Temp[0] + 1][2]
    $a_Array[0][0] = $a_Temp[0]
    For $i = 1 To $a_Temp[0]
        $a_TempString = StringSplit($a_Temp[$i], '-', 2)

        If UBound($a_TempString) <> 2 Then
            TrayTip('111 Периоды', 'Ошибка в формате файла с временными периодами', 5, 3)
            Sleep(5000)
            Exit
        EndIf
        For $j = 0 To 1
            $a_Array[$i][$j] = StringRegExpReplace($a_TempString[$j], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', '$3$2$1$4$5')
            If @extended <> 5 Then
                TrayTip('222 Периоды', 'Ошибка в формате файла с временными периодами', 5, 3)
                Sleep(5000)
                Exit
            EndIf
            $a_Array[$i][$j] = Number($a_Array[$i][$j])
        Next
    Next
    For $i = 1 To $a_Array[0][0] - 1
        If $a_Array[$i][0] >= $a_Array[$i][1] Or $a_Array[$i + 1][0] <= $a_Array[$i][1] Then
            ConsoleWrite($i & @LF)
            TrayTip('333 Периоды', 'Ошибка в формате файла с временными периодами', 5, 3)
            Sleep(5000)
            Exit
        EndIf
    Next
    Return $s_Text
EndFunc   ;==>_CheckFile
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А без autoit как бы вы сделали? Как только станет понятна последовательность действий, то запрограммировать будет проще
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
StarEdik
расшифруйте понятие "ничего не получается". Совсем "ничего" ?? Или что?

На вскидку в скрипте в регулярке мне не нравится максимальная жадность. Надо попробовать запустить, посмотреть как работает...


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

Нее, максимальная жадность тут как раз в тему. :smile:
Только скрипт просто проверяет корректность диапазонов, никаких объединений он не делает. А не работает то что?...
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
inververs
Берем первую строку. Потом по одному все что под этой строкой и проверяем, перекрывает ли . Если да то удаляем , переходим на следующую сроку, и так до конца
Как то так, наверно.
Код:
19.11.2011 20:10 - 21.11.2011 11:17
21.11.2011 01:42 - 21.11.2011 03:22
22.11.2011 20:10 - 25.11.2011 20:40 
24.11.2011 19:50 - 27.11.2011 23:20 
25.11.2011 11:34 - 29.11.2011 01:47
26.11.2011 01:40 - 28.11.2011 14:20
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20

19.11.2011 20:10 ----------------------------------- 21.11.2011 11:17   ( 19.11.2011 20:10 - 21.11.2011 11:17 )
                 21.11.2011 01:42 - 21.11.2011 03:22

==============================================================================
22.11.2011 20:10 - 27.11.2011 23:20
25.11.2011 11:34 - 29.11.2011 01:47
26.11.2011 01:40 - 28.11.2011 14:20
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20

22.11.2011 20:10 ----------------- 25.11.2011 20:40 
                  24.11.2011 19:50 ------------------ 27.11.2011 23:20  (22.11.2011 20:10 - 27.11.2011 23:20)

=============================================================================
22.11.2011 20:10 - 29.11.2011 01:47
26.11.2011 01:40 - 28.11.2011 14:20
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20

22.11.2011 20:10 ---------------- 27.11.2011 23:20
                 25.11.2011 11:34 ---------------- 29.11.2011 01:47    ( 22.11.2011 20:10 - 29.11.2011 01:47 )

=============================================================================
22.11.2011 20:10 - 29.11.2011 01:47
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20


22.11.2011 20:10 ----------------------------------- 29.11.2011 01:47   ( 22.11.2011 20:10 - 29.11.2011 01:47 )
                 26.11.2011 01:40 - 28.11.2011 14:20

=============================================================================
22.11.2011 20:10 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 04:20

22.11.2011 20:10 ------------------ 29.11.2011 01:47
                 28.11.2011 11:34 ------------------- 30.11.2011 01:47   ( 22.11.2011 20:10 - 30.11.2011 01:47 )

=============================================================================

22.11.11 20:10 --------------- 25.11.11 20:40 
               24.11.11 19:50 ------------------------------- 27.11.11 23:20 
                               25.11.11 11:34 --------------------------------------------- 29.11.11 01:47
                                               26.11.11 01:40 -------------- 28.11.11 14:20
                                                                             28.11.11 11:34 ------------------------------- 30.11.11 01:47
                                                                                            29.11.11 01:40 - 30.11.11 04:20

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=

C2H5OH
Совсем, совсем.
максимальная жадность
Плохое слово.
никаких объединений он не делает
Эта функция из другого примера и он ни каких объединений не делает. Вы же гуру, стоите выше, должны понять
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
StarEdik
Вы нас обманываете.
Приведенный Вами скрипт на выложенном Вами файле выдаёт результат:
Код:
333 Периоды
Ошибка в формате файла с временными периодами
(что, согласно коду скрипта, соответствует найденному пересечению диапазонов)

Если Вам нужна помощь в написании скрипта, то сформулируйте корректно свои вопросы.
Если Вы хотите получить готовый скрипт, то идите в стол заказов.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
C2H5OH
Вы нас обманываете.
Плохое обвинение, и это вам не к лицу. Из за скрипта, смешно 8)
StarEdik
Эта функция из другого примера
Вы наверна технику мастера не понимаете. Жаль, очень жаль, что его нет :(
C2H5OH
Если Вы хотите получить готовый скрипт
Да, мне нужен скрипт. Ничего кто нить поймет и надеюсь поможет

Я вам МИНУС не ставлю, а мог бы. ;)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Тот скрипт , что Вы нашли ничем Вам не поможет, так как он не объединяет перекрывающиеся диапазоны дат, а только проверяет. Не работает, так как "1-й" элемент массива - пустая строка и его нужно удалить.
Для того, что-бы этот пример работал (до проверки) добавьте
Код:
#include <array.au3>
;;;;;;;;;;;;;;;;;
    $a_Temp = StringSplit(StringStripCR($s_Text), @LF)
	;и после этой строки добавить:
	_ArrayDelete($a_Temp,1) ; Удалить 1-й элемент массива
	$a_Temp[0]-=1 ;Изменить количество элементов массива

В результате создастся массив с Вашими периодами...
Но можно и проще :
Код:
#include <array.au3>
#include <date.au3>

$File=FileOpen(@ScriptDir&'/1.txt')
$Array=FileReadToArray($File)
FileClose($File)

Dim $Array2d[Ubound($Array)][2]
For $i=1 to UBound($Array)-1
 $Time=StringSplit($Array[$i],'-')
 $Array2d[$i][0]=StringStripWS(StringRegExpReplace($Time[1], '(\d{2}).(\d{2}).(\d{4})',' $3/$2/$1 '),1+2+4)
 $Array2d[$i][1]=StringStripWS(StringRegExpReplace($Time[2], '(\d{2}).(\d{2}).(\d{4})',' $3/$2/$1 '),1+2+4)
Next
_ArrayDelete($Array2d,0)
_ArrayDisplay($Array2d)
Дальше уже нужно перебирать массив...
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Мозги размял
Код:
#include <array.au3>
#include <date.au3>
#include <file.au3>

Global $Array, $Array2, $ArrayTemp, $ArrayOut
Global $j, $i = 0

_FileReadToArray(@ScriptDir & '/1.txt', $Array)

;_ArrayDisplay($Array)

Dim $Array2[UBound($Array) * 2 + 1]

For $i = 1 To $Array[0]
	If StringRegExp($Array[$i], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', 0) Then
		$j += 1
		$ArrayTemp = StringSplit($Array[$i], ' - ', 1)
		$Array2[0] = $j * 2
		$Array2[$j * 2 - 1] = StringRegExpReplace($ArrayTemp[1], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5:00')
		$Array2[$j * 2] = StringRegExpReplace($ArrayTemp[2], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5:00')
	EndIf
Next

;$j = 0
For $i = 1 To $Array2[0]
	;ConsoleWrite(_DateDiff('s', $Array2[$i], $Array2[$i + 1]) & @CRLF)
	If $Array2[$i] <> '' Then
		If _DateDiff('s', $Array2[$i], $Array2[$i + 1]) < 0 Then
			$Array2[$i] = ''
			$Array2[$i + 1] = ''
		Else
			;Здесь уже можно забирать по порядку не пустые ячейки
			;$j += 1
			$Out_0 = $Array2[$i]
			$Out_1 = _DateTimeFormat($Array2[$i], 0) ;0,1,2,3,4,5
			$Out_2 = StringRegExpReplace($Array2[$i], '.*(\d{4})\/(\d{2})\/(\d{2})\s+(\d{2}):(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5')
			ConsoleWrite($Out_2 & @CRLF)
		EndIf
	EndIf
Next
;ConsoleWrite($j & @CRLF)

_ArrayDisplay($Array2)
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
СН3СН2ОН
Мозги размял - Япрофиэтосерьезно
Спасибо вам за cкрипт.
Код:
#include <array.au3>
#include <date.au3>
#include <file.au3>

Global $Array, $Array2, $ArrayTemp, $ArrayOut
Global $j, $i = 0

_FileReadToArray(@ScriptDir & '/1.txt', $Array)

;_ArrayDisplay($Array)

Dim $Array2[UBound($Array) * 2 + 1]

For $i = 1 To $Array[0]
    If StringRegExp($Array[$i], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', 0) Then
        $j += 1
        $ArrayTemp = StringSplit($Array[$i], ' - ', 1)
        $Array2[0] = $j * 2
        $Array2[$j * 2 - 1] = StringRegExpReplace($ArrayTemp[1], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5:00')
        $Array2[$j * 2] = StringRegExpReplace($ArrayTemp[2], '.*(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5:00')
    EndIf
Next

;$j = 0
For $i = 1 To $Array2[0]
    ;ConsoleWrite(_DateDiff('s', $Array2[$i], $Array2[$i + 1]) & @CRLF)
    If $Array2[$i] <> '' Then
        If _DateDiff('s', $Array2[$i], $Array2[$i + 1]) < 0 Then
            $Array2[$i] = ''
            $Array2[$i + 1] = ''
        Else
            ;Здесь уже можно забирать по порядку не пустые ячейки
            ;$j += 1
            $Out_0 = $Array2[$i]
            $Out_1 = _DateTimeFormat($Array2[$i], 0) ;0,1,2,3,4,5
            $Out_2 = StringRegExpReplace($Array2[$i], '.*(\d{4})\/(\d{2})\/(\d{2})\s+(\d{2}):(\d{2}):(\d{2}).*', '$3/$2/$1 $4:$5')
            ConsoleWrite($Out_2 & @CRLF)
        EndIf
    EndIf
Next
;ConsoleWrite($j & @CRLF)

_ArrayDisplay($Array2)


Но не выполняется условие если

19.11.2011 10:11 - 21.11.2011 10:12
21.11.2011 01:42 - 21.11.2011 10:10

должно
19.11.2011 10:11 - 21.11.2011 10:12

но скрипт выдает
19.11.2011 10:11 - 21.11.2011 10:10

или
22.11.2011 10:13 - 22.11.2011 10:14
22.11.2011 10:15 - 30.11.2011 20:40
24.11.2011 19:50 - 27.11.2011 23:20
25.11.2011 11:34 - 29.11.2011 01:47
26.11.2011 01:40 - 28.11.2011 14:20
28.11.2011 11:34 - 30.11.2011 01:47
29.11.2011 01:40 - 30.11.2011 10:16

должно
22.11.2011 10:13 - 30.11.2011 20:40

но получаем
22.11.2011 10:13 - 30.11.2011 10:16

Файл 1.txt для тестирования во вложении
Буду вам премного благодарен если вы поможете сохранить результат в файле в исходном виде. :-[
 

Вложения

  • 1.txt
    331 байт · Просмотры: 5
A

Alofa

Гость
StarEdik сказал(а):
Файл 1.txt для тестирования ...
А результат того первого файла 1.txt можете прикрепить? Ладно не надо.


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

StarEdik сказал(а):
или
22.11.2011 10:13 - 22.11.2011 10:14
22.11.2011 10:15 - 30.11.2011 20:40
24.11.2011 19:50 - 27.11.2011 23:20
...
должно
22.11.2011 10:13 - 30.11.2011 20:40
Что-то вы сами запутались (или я чего не догнал)? Между "22.11.2011 10:14" и "22.11.2011 10:15" разница 1 минута.

В общем протестируйте это:
Код:
Global $Date[2][2]
Global $hFile = FileOpen('1.txt')
Global $hFileResult = FileOpen('Result.txt', 2)

Local $DateRead_1, $DateRead_2, $DateRead_1Mod, $DateRead_2Mod
While 1
	$sLine = FileReadLine($hFile)
	If @error = -1 Then
		If $Date[0][0] Then FileWriteLine($hFileResult, $Date[0][0] & ' - ' & $Date[1][0])
		FileClose($hFile)
		FileClose($hFileResult)
		ExitLoop
	EndIf
	If Not $sLine Then ContinueLoop
	$aRes = StringRegExp($sLine, '((\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2}))\h-\h((\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2}))', 3)
	$DateRead_1 = $aRes[0]
	$DateRead_2 = $aRes[6]
	$DateRead_1Mod = $aRes[3] & $aRes[2] & $aRes[1] & $aRes[4] & $aRes[5]
	$DateRead_2Mod = $aRes[9] & $aRes[8] & $aRes[7] & $aRes[10] & $aRes[11]

	If $Date[0][0] Then
		Select
			Case $Date[1][1] < $DateRead_1Mod
				FileWriteLine($hFileResult, $Date[0][0] & ' - ' & $Date[1][0])
				$Date[0][0] = ''
			Case $Date[1][1] < $DateRead_2Mod
				$Date[1][0] = $DateRead_2
				$Date[1][1] = $DateRead_2Mod
		EndSelect
	EndIf

	If Not $Date[0][0] Then
		Dim $Date[2][2] = [[$DateRead_1, $DateRead_1Mod], [$DateRead_2, $DateRead_2Mod]]
;~ 		Или Так:
;~ 		$Date[0][0] = $DateRead_1
;~ 		$Date[0][1] = $DateRead_1Mod
;~ 		$Date[1][0] = $DateRead_2
;~ 		$Date[1][1] = $DateRead_2Mod
	EndIf
WEnd
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
Что-то вы сами запутались (или я чего не догнал)? Между "22.11.2011 10:14" и "22.11.2011 10:15" разница 1 минута.
Никакой путаницы.
Alofa
(или я чего не догнал)?
Да не догнали. Это для примера

Alofa
В общем протестируйте это:
Само собой.
 
A

Alofa

Гость
StarEdik сказал(а):
Никакой путаницы. Это для примера
Я что-то не понял: вам нужен скрипт который, помимо всего прочего, еще и не учитывал бы подобные перерывы?
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
Я что-то не понял: вам нужен скрипт который, помимо всего прочего, еще и не учитывал бы подобные перерывы?
Да , вы не поняли. Этот скрипт работает
Код:
Global $Date[2][2]
Global $hFile = FileOpen('1.txt')
Global $hFileResult = FileOpen('Result.txt', 2)

Local $DateRead_1, $DateRead_2, $DateRead_1Mod, $DateRead_2Mod
While 1
    $sLine = FileReadLine($hFile)
    If @error = -1 Then
        If $Date[0][0] Then FileWriteLine($hFileResult, $Date[0][0] & ' - ' & $Date[1][0])
        FileClose($hFile)
        FileClose($hFileResult)
        ExitLoop
    EndIf
    If Not $sLine Then ContinueLoop
    $aRes = StringRegExp($sLine, '((\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2}))\h-\h((\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2}))', 3)
    $DateRead_1 = $aRes[0]
    $DateRead_2 = $aRes[6]
    $DateRead_1Mod = $aRes[3] & $aRes[2] & $aRes[1] & $aRes[4] & $aRes[5]
    $DateRead_2Mod = $aRes[9] & $aRes[8] & $aRes[7] & $aRes[10] & $aRes[11]

    If $Date[0][0] Then
        Select
            Case $Date[1][1] < $DateRead_1Mod
                FileWriteLine($hFileResult, $Date[0][0] & ' - ' & $Date[1][0])
                $Date[0][0] = ''
            Case $Date[1][1] < $DateRead_2Mod
                $Date[1][0] = $DateRead_2
                $Date[1][1] = $DateRead_2Mod
        EndSelect
    EndIf

    If Not $Date[0][0] Then
        Dim $Date[2][2] = [[$DateRead_1, $DateRead_1Mod], [$DateRead_2, $DateRead_2Mod]]
;~      Или Так:
;~      $Date[0][0] = $DateRead_1
;~      $Date[0][1] = $DateRead_1Mod
;~      $Date[1][0] = $DateRead_2
;~      $Date[1][1] = $DateRead_2Mod
    EndIf
WEnd
StarEdik
Что-то вы сами запутались (или я чего не догнал)? Между "22.11.2011 10:14" и "22.11.2011 10:15" разница 1 минута.
Это я в примере сам составил разницу 1 мин, чтоб результат удивить - работает скрипт или нет. Скрипт работает. Если что я отпишусь - только после проверки файла на 100 и более строк.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
Привет!!!
Так получился, что в списке оказался не сортированные интервалы. Если список не сортирован по левой колонке то происходить не правильное объединение перекрывающихся диапазоны дат.

09.02.2011 10:01 - 13.02.2011 15:00
10.02.2011 03:00 - 12.02.2011 20:22
18.02.2011 07:10 - 20.02.2011 10:40
19.02.2011 07:50 - 21.02.2011 04:20
22.10.2011 10:13 - 23.10.2011 10:12
22.10.2011 10:03 - 24.10.2011 17:34
25.11.2011 10:35 - 30.11.2011 20:40
25.11.2011 10:11 - 26.11.2011 11:32



Результат

09.02.2011 10:01 - 13.02.2011 15:00
18.02.2011 07:10 - 21.02.2011 04:20
22.10.2011 10:13 - 24.10.2011 17:34
25.11.2011 10:35 - 30.11.2011 20:40



А должо

09.02.2011 10:01 - 13.02.2011 15:00
18.02.2011 07:10 - 21.02.2011 04:20
22.10.2011 10:03 - 24.10.2011 17:34
25.11.2011 10:11 - 30.11.2011 20:40
И еще
Alofa
Я что-то не понял: вам нужен скрипт который, помимо всего прочего, еще и не учитывал бы подобные перерывы?
У вас здесь был ответ. Вы удалили его. Восстановите ответ, так как может кому та пригодится
 
A

Alofa

Гость
Проверяйте:
Код:
#include <Array.au3>

Global $DateRead_1, $DateRead_2, $Array[1][2]
Local $hFileIN = @ScriptDir & '\1.txt'
Local $hFileOUT = @ScriptDir & '\Result.txt'

If Not _My_FileReadToArray(FileOpen($hFileIN)) Then Exit MsgBox(16, 'Ошибка!', 'Ошибка функции "_My_FileReadToArray()"')
If Not _ArraySort($Array, 0, 1) Then Exit MsgBox(16, 'Ошибка!', 'Ошибка функции "_ArraySort()"' &@LF& '@error = ' & @error)
$hFileResult = FileOpen($hFileOUT, 2)
For $i = 1 To $Array[0][0]
    If $DateRead_1 Then
        Select
            Case $DateRead_2 < $Array[$i][0]
                _My_FileWriteLine($hFileResult, $DateRead_1 & $DateRead_2)
                $DateRead_1 = ''
            Case $DateRead_2 < $Array[$i][1]
                $DateRead_2 = $Array[$i][1]
        EndSelect
    EndIf

    If Not $DateRead_1 Then
        $DateRead_1 = $Array[$i][0]
        $DateRead_2 = $Array[$i][1]
    EndIf
    
    If $i = $Array[0][0] Then
        If $DateRead_1 Then _My_FileWriteLine($hFileResult, $DateRead_1 & $DateRead_2)
        FileClose($hFileResult)
    EndIf
Next

Func _My_FileWriteLine($FResult, $Date)
    $Date = StringRegExpReplace($Date, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})', '\3.\2.\1 \4:\5 - \8.\7.\6 \9:\10')
    FileWriteLine($FResult, $Date)
EndFunc   ;==>_My_FileWriteLine

Func _My_FileReadToArray($sFilePath)
    If $sFilePath = -1 Then Return 0
    Local $UB, $Line
    
    While 1
        $Line = FileReadLine($sFilePath)
        If @error = -1 Then
            $Array[0][0] = $UB
            ExitLoop
        EndIf
        $Line = StringRegExp($Line, '(\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2})\h-\h(\d{2})\.(\d{2})\.(\d{4})\h(\d{2}):(\d{2})', 3)
        If Not @error Then
            $UB = UBound($Array)
            ReDim $Array[$UB + 1][2]
        Else
            ContinueLoop
        EndIf
        $Array[$UB][0] = $Line[2] & $Line[1] & $Line[0] & $Line[3] & $Line[4]
        $Array[$UB][1] = $Line[7] & $Line[6] & $Line[5] & $Line[8] & $Line[9]
    WEnd
    
    FileClose($sFilePath)
    Return 1
EndFunc   ;==>_My_FileReadToArray



StarEdik сказал(а):
У вас здесь был ответ...
Вот:
Замените строки:
Код:
_My_FileWriteLine($hFileResult, $DateRead_1 & $DateRead_2)
$DateRead_1 = ''


На следующие:
Код:
If Int($Array[$i][0] - $DateRead_2) >= 1 Then
    _My_FileWriteLine($hFileResult, $DateRead_1 & $DateRead_2)
	$DateRead_1 = ''
Else
    ContinueCase
EndIf
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
По моему ваш скрипт сортирует не так как должно.
Сортирование должно по левой колонке, дд.ММ.ГГ ЧЧ.мм. Будьте по внимательнее.
Сам файл до сортировки
22.10.2011 10:13 - 23.10.2011 10:12
22.10.2011 10:03 - 24.10.2011 17:34
25.11.2011 10:35 - 30.11.2011 20:40
25.11.2011 10:11 - 26.11.2011 11:32
20.10.2011 10:13 - 23.10.2011 10:12
23.10.2011 10:03 - 24.10.2011 17:34
27.11.2011 10:35 - 30.11.2011 20:40
05.11.2011 10:11 - 26.11.2011 11:32

Файл после сортировки

05.11.2011 10:11 - 26.11.2011 11:32
20.10.2011 10:13 - 23.10.2011 10:12
22.10.2011 10:03 - 24.10.2011 17:34
22.10.2011 10:13 - 23.10.2011 10:12
23.10.2011 10:03 - 24.10.2011 17:34
25.11.2011 10:11 - 26.11.2011 11:32
25.11.2011 10:35 - 30.11.2011 20:40
27.11.2011 10:35 - 30.11.2011 20:40

Вот и результат перелрывания

05.11.2011 10:11 - 30.11.2011 20:40
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
эта ветка не Стол заказов.
Неужели.
Alofa
Что-то не вижу усилий с вашей стороны.
Альберта Эйнштейна
Единственное, что мешает моему обучению, это мое образование.
К сожалению уже очень поздно.
Garrett
Их нет и не будет
Спасибо на добром слове.
OffTopic:

Делай добро для человека не для того чтобы тебя хвалили, а чтоб тебя помнили. Как я помню ЕГО - того которого нет ... :(
Видно по этому говорят - "Делай добро и бросай его в воду"
 
Статус
Закрыто для дальнейших ответов.
Верх