Что нового

Как правильно отсортировать данные из массива

Malderin

Новичок
Сообщения
68
Репутация
1
Написал я вот такой код в автоит версии 3.2.12.1.
Код:
#include <Timers.au3>
#include <GUIConstantsEx.au3>
#include <Date.au3>

Global $stat2, $stat, $sost_time

Reset_log()

Func Reset_log()
dim $stat2 = IniReadSection(@ScriptDir&"\log.log","History")
	For $i = 1 To $stat2[0][0]
		If (StringInStr($stat2[$i][1], StringIsDigit(""))) Then
			$sost_time=StringFormat($stat2[1][0]) ;разница во времени рассчитывается по первой записи в логе
			$diff = _DateDiff("D", $sost_time, _NowCalc())
		EndIf
	Next
			MsgBox(4096, "", "Разница во времени (в днях) = " & $diff & @LF & "Начальная дата по логу (первая запись) = " & $stat2[1][0] & @LF & "Текущая дата = " & _NowCalc())
EndFunc


Для работы ему нужен файл log.log в папке со скриптом вот такого содержания (строк может быть больше, это не важно для примера):
Код:
[History]
2014.10.05 14:24:13 Очистка лога. Количество по логу=120

[Sosta]
2014.08.21 10:21:22=Пр

Всё работает как надо, расчитывается разница во времени (в днях). Но вот в чем обнаруженный мной шлюк (а может я не понимаю чего?). Путем долгих экспериментов выявленор, что если в записи "Количество по логу" в значении есть ноль, то все работает как надо, если нет ноля - скрипт вываливается с ошибкой, переменная $diff не считается. При чем не важно в каком месте этого числа есть ноль, например с числами 102, 1220122, 2122320 и т.п. скрипт работает.
Вообще не понимаю почему так, помогите разобраться в чем косяк, или это косяк автоита ?
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Re: Глюк автоит или я что то не понимаю ?

Malderin [?]
Проблема в условии:
Код:
If (StringInStr($stat2[$i][1], StringIsDigit(""))) Then


Вызов StringIsDigit("") вернёт ноль. Получается условие: если в значении первого параметра есть ноль, тогда...
Поэтому у вас и работает только при наличии нуля.

Для каких целей вы применяете StringIsDigit() и StringFormat() ?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Re: Глюк автоит или я что то не понимаю ?

Косяк в версии 3.2.12.1. Прошло 4 года.
 
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Re: Глюк автоит или я что то не понимаю ?

InnI сказал(а):
Malderin [?]
Проблема в условии:
Код:
If (StringInStr($stat2[$i][1], StringIsDigit(""))) Then


Вызов StringIsDigit("") вернёт ноль. Получается условие: если в значении первого параметра есть ноль, тогда...
Поэтому у вас и работает только при наличии нуля.

Для каких целей вы применяете StringIsDigit() и StringFormat() ?

Действительно, возвращаемое значение "0" из-за того и грабли. Мой косяк. Задумывалось, что если в $stat2[$i][1]есть цифры (нужно первое совпадение), то "действие" а в итоге получалось что если есть 0, то "действие".
Как это реализовать пока не знаю, буду думать, если подскажет кто то, буду признателен.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Re: Глюк автоит или я что то не понимаю ?

Malderin [?]
если в $stat2[$i][1] есть цифры (нужно первое совпадение), то "действие"
Код:
If StringRegExp($stat2[$i][1], "\d") Then
 
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Re: Глюк автоит или я что то не понимаю ?

InnI сказал(а):
Malderin [?]
если в $stat2[$i][1] есть цифры (нужно первое совпадение), то "действие"
Код:
If StringRegExp($stat2[$i][1], "\d") Then

Благодарю, буквально пару часов назад сам вспомнил про эту функцию и уже все сделал, вот как у меня получилось:

Код:
#include <Timers.au3>
#include <GUIConstantsEx.au3>
#include <Date.au3>

Global $stat2, $stat, $sost_time

Reset_log()

Func Reset_log()
dim $stat2 = IniReadSection(@ScriptDir&"\log.log","History")
    For $i = $stat2[0][0] To 1 step -1
          If StringRegExp($stat2[$i][1], "\d") Then
	  $sost_time=StringFormat($stat2[$i][0]) ;разница во времени рассчитывается по первой записи в логе
	  $diff = _DateDiff("w", $sost_time, _NowCalc())
        EndIf
    Next
            MsgBox(4096, "", "Разница во времени (в днях) = " & $diff & @LF & "Начальная дата по логу (первая запись) = " & $stat2[1][0] & @LF & "Текущая дата = " & _NowCalc())
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Глюк автоит или я что то не понимаю ?

Malderin [?]
вот как у меня получилось
Я бы еще проверил ошибку после вызова IniReadSection().
 
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Re: Глюк автоит или я что то не понимаю ?

madmasles сказал(а):
Malderin [?]
вот как у меня получилось
Я бы еще проверил ошибку после вызова IniReadSection().

Об этой ошибке речь ?
Код:
If StringRegExp($stat2[$i][0], "\d") Then

Или я что то ещё не заметил ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Глюк автоит или я что то не понимаю ?

Malderin [?]
Или я что то ещё не заметил ?
Внимательно посмотрите пример к
Код:
IniReadSection()


И еще:
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

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

С уважением, ваш Глобальный модератор.
 
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Re: Глюк автоит или я что то не понимаю ?

madmasles сказал(а):
Malderin [?]
Или я что то ещё не заметил ?
Внимательно посмотрите пример к
Код:
IniReadSection()
Дошло наконец, я то думал где то у меня в скрипте ошибка, а вы мне предлагаете добавить условие на проверку ошибки )) Ясно теперь, спасибо за помощь !
 
Верх