Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL, YURIY  
Форум NeoBook » Всё о программе NeoBook » Общие вопросы по NeoBook » Определить большее число
Определить большее число
СергейДата: Пн, 09 Мая 2011, 23:59 | Сообщение # 1
Необукер
Опять с математикой не дружу...
Второй день голову ломаю, никак не соображу.
Суть такая:
Есть массив с данными, например
Quote
dData_C=07.02.2011
dData_D=
dData_E=
У каждой буквы своя дата.

Поступают новые данные, например

Quote
aEvTxt1=C
aEvDat1=20.04.2011
aEvTxt2=E
aEvDat2=02.03.2011

Надо заменить данные на новые, если дата больше имеющиеся.

Моей фантазии хватило на это

все вроде работает, но появилась проблема…
Входящие данные, оказалось, могут быть и такими
Quote
aEvTxt1=C
aEvDat1=20.04.2011
aEvTxt2=E
aEvDat2=02.03.2011
aEvTxt3=C
aEvDat3=02.03.2011
т.е. две даты на букву С. Ладно если идет один повтор, но бывает по разному. И еще одна проблема, если порядок входящих по возрастанию, например
Quote
aEvTxt1=C
aEvDat1=20.03.2011
aEvTxt3=C
aEvDat3=02.04.2011
то все нормально рассчитывается. Но если по убыванию
Quote
aEvTxt1=C
aEvDat1=20.05.2011
aEvTxt3=C
aEvDat3=02.04.2011
То в массив новой даты попадает меньшая дата.
Мозги кипят, и я туплю %)


Сообщение отредактировано
Сергей - Вт, 10 Мая 2011, 00:01
 
СообщениеОпять с математикой не дружу...
Второй день голову ломаю, никак не соображу.
Суть такая:
Есть массив с данными, например
Quote
dData_C=07.02.2011
dData_D=
dData_E=
У каждой буквы своя дата.

Поступают новые данные, например

Quote
aEvTxt1=C
aEvDat1=20.04.2011
aEvTxt2=E
aEvDat2=02.03.2011

Надо заменить данные на новые, если дата больше имеющиеся.

Моей фантазии хватило на это

все вроде работает, но появилась проблема…
Входящие данные, оказалось, могут быть и такими
Quote
aEvTxt1=C
aEvDat1=20.04.2011
aEvTxt2=E
aEvDat2=02.03.2011
aEvTxt3=C
aEvDat3=02.03.2011
т.е. две даты на букву С. Ладно если идет один повтор, но бывает по разному. И еще одна проблема, если порядок входящих по возрастанию, например
Quote
aEvTxt1=C
aEvDat1=20.03.2011
aEvTxt3=C
aEvDat3=02.04.2011
то все нормально рассчитывается. Но если по убыванию
Quote
aEvTxt1=C
aEvDat1=20.05.2011
aEvTxt3=C
aEvDat3=02.04.2011
То в массив новой даты попадает меньшая дата.
Мозги кипят, и я туплю %)

Автор - Сергей
Дата добавления - 09 Мая 2011 в 23:59
AlienДата: Вт, 10 Мая 2011, 05:11 | Сообщение # 2
Quote (Сергей)
Опять с математикой не дружу...
Второй день голову ломаю, никак не соображу.

зато с сочинением рифм у тебя все в порядке :)

Первый раз у тебя dData_C приравнивается к 1.1.1900, потом проверяет
Если 20.05.2011 больше чем 1.1.1900
То приравнять к newData_С 20.05.2011
Следующий раз как выполняется цикл на C
Заметь dData_C у тебя так и остается равным 1.1.1900
Поэтому спокойно проверяет

Если 02.04.2011 больше чем 1.1.1900
То приравнять к newData_С 02.04.2011

В этом собственно у тебя и вся загвоздка

Добавлено (10 Май 2011, 05:10)
---------------------------------------------
я думаю нужно просто дописать

Quote
...
If "[nIn_[aEvTxt[i]]]" ">" "[nIs_[aEvTxt[i]]]"
If "[nIn_[aEvTxt[i]]]" ">" "2"
SetVar "[newData_[aEvTxt[i]]]" "[aEvDat[i]]"
SetVar "[dData_[aEvTxt[i]]]" "[aEvDat[i]]"
EndIf
Else
...

Добавлено (10 Май 2011, 05:11)
---------------------------------------------
да и кстати у тебя там опечатка

Quote
DateToNum "[dData_[aEvTxt[i]]]" "Default" "[sIs_[aEvTxt[i]]]"

If "[nIn_[aEvTxt[i]]]" ">" "[nIs_[aEvTxt[i]]]"



Сообщение отредактировано
Alien - Вт, 10 Мая 2011, 05:15
 
Сообщение
Quote (Сергей)
Опять с математикой не дружу...
Второй день голову ломаю, никак не соображу.

зато с сочинением рифм у тебя все в порядке :)

Первый раз у тебя dData_C приравнивается к 1.1.1900, потом проверяет
Если 20.05.2011 больше чем 1.1.1900
То приравнять к newData_С 20.05.2011
Следующий раз как выполняется цикл на C
Заметь dData_C у тебя так и остается равным 1.1.1900
Поэтому спокойно проверяет

Если 02.04.2011 больше чем 1.1.1900
То приравнять к newData_С 02.04.2011

В этом собственно у тебя и вся загвоздка

Добавлено (10 Май 2011, 05:10)
---------------------------------------------
я думаю нужно просто дописать

Quote
...
If "[nIn_[aEvTxt[i]]]" ">" "[nIs_[aEvTxt[i]]]"
If "[nIn_[aEvTxt[i]]]" ">" "2"
SetVar "[newData_[aEvTxt[i]]]" "[aEvDat[i]]"
SetVar "[dData_[aEvTxt[i]]]" "[aEvDat[i]]"
EndIf
Else
...

Добавлено (10 Май 2011, 05:11)
---------------------------------------------
да и кстати у тебя там опечатка

Quote
DateToNum "[dData_[aEvTxt[i]]]" "Default" "[sIs_[aEvTxt[i]]]"

If "[nIn_[aEvTxt[i]]]" ">" "[nIs_[aEvTxt[i]]]"


Автор - Alien
Дата добавления - 10 Мая 2011 в 05:11
ip19216811Дата: Вт, 10 Мая 2011, 16:49 | Сообщение # 3
Любопытный
В Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать :)

Сообщение отредактировано
ip19216811 - Вт, 10 Мая 2011, 16:54
 
СообщениеВ Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать :)

Автор - ip19216811
Дата добавления - 10 Мая 2011 в 16:49
AlienДата: Вт, 10 Мая 2011, 17:13 | Сообщение # 4
Quote (ip19216811)
В Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать :)

У него и так дата переводится в timestamp
Quote (Сергей)
DateToNum "[aEvDat[i]]" "Default" "[nIn_[aEvTxt[i]]]"
 
Сообщение
Quote (ip19216811)
В Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать :)

У него и так дата переводится в timestamp
Quote (Сергей)
DateToNum "[aEvDat[i]]" "Default" "[nIn_[aEvTxt[i]]]"

Автор - Alien
Дата добавления - 10 Мая 2011 в 17:13
ip19216811Дата: Вт, 10 Мая 2011, 18:58 | Сообщение # 5
Любопытный
Quote (Alien)
У него и так дата переводится в timestamp

Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.

ПыСы А этот код насколько я понял с Юникс форматом не имеет ничего общего

Quote (Alien)
Code
DateToNum "[aEvDat[i]]" "Default" "[nIn_[aEvTxt[i]]]"
 
Сообщение
Quote (Alien)
У него и так дата переводится в timestamp

Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.

ПыСы А этот код насколько я понял с Юникс форматом не имеет ничего общего

Quote (Alien)
Code
DateToNum "[aEvDat[i]]" "Default" "[nIn_[aEvTxt[i]]]"

Автор - ip19216811
Дата добавления - 10 Мая 2011 в 18:58
DEMBELДата: Вт, 10 Мая 2011, 19:12 | Сообщение # 6
Наш дизайнер
да, вы говорите о разных вещах, timestamp в нб считается как кол-во ДНЕЙ с 30 декабря 1899г.
Поэтому здесь минимально чувствительная разница в сутки (отсюда могут быть ошибки если требуется более точное определение, но в случае сабжа вроде не должно).
Quote (Сергей)
То в массив новой даты попадает меньшая дата.
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.

Добавлено (10 Май 2011, 19:12)
---------------------------------------------

Quote (DEMBEL)
кол-во ДНЕЙ

видимо столь "элегантно" обошли проблему учитывания временных зон, если бы использовался Unix timestamp


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщениеда, вы говорите о разных вещах, timestamp в нб считается как кол-во ДНЕЙ с 30 декабря 1899г.
Поэтому здесь минимально чувствительная разница в сутки (отсюда могут быть ошибки если требуется более точное определение, но в случае сабжа вроде не должно).
Quote (Сергей)
То в массив новой даты попадает меньшая дата.
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.

Добавлено (10 Май 2011, 19:12)
---------------------------------------------

Quote (DEMBEL)
кол-во ДНЕЙ

видимо столь "элегантно" обошли проблему учитывания временных зон, если бы использовался Unix timestamp

Автор - DEMBEL
Дата добавления - 10 Мая 2011 в 19:12
AlienДата: Вт, 10 Мая 2011, 19:27 | Сообщение # 7
Quote (ip19216811)
Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.

DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.
 
Сообщение
Quote (ip19216811)
Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.

DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.

Автор - Alien
Дата добавления - 10 Мая 2011 в 19:27
ip19216811Дата: Вт, 10 Мая 2011, 19:31 | Сообщение # 8
Любопытный
Quote (Alien)
DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.

Всегда надо думать про будущее, сейчас только днями, а потом мало ли записи будут добавляться по нескольку в один день вот тогда и пригодиться Юникс время.

 
Сообщение
Quote (Alien)
DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.

Всегда надо думать про будущее, сейчас только днями, а потом мало ли записи будут добавляться по нескольку в один день вот тогда и пригодиться Юникс время.


Автор - ip19216811
Дата добавления - 10 Мая 2011 в 19:31
СергейДата: Вт, 10 Мая 2011, 20:17 | Сообщение # 9
Необукер
Quote (Alien)
я думаю нужно просто дописать
ппц, а я два дня голову ломал :D
А ведь надо было-то заполнить на новую :D
Спасибо, ты настоящий математик :) Вроде работает, дальнейшее покажет, т.к. данные поступают по разному...
Quote (Alien)
да и кстати у тебя там опечатка
да, очепятка :) Код несколько раз переписывался, вот глаза и замылились
Quote (DEMBEL)
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.
Quote
DateToNum "30.12.2010" --> 40542
DateToNum "30.01.2011" --> 40573
DateToNum "30.02.2011" --> Error
DateToNum "30.03.2011" --> 40632
Старая дата имеет меньший стамп, только непонятно почему в 3 варианте ошибка :(

Добавлено (10 Май 2011, 20:14)
---------------------------------------------

Quote (Сергей)
только непонятно почему в 3 варианте ошибка
не виноват я, пиво само пришло :D
30 марта, т.е. никогда :)

Добавлено (10 Май 2011, 20:17)
---------------------------------------------

Quote (ip19216811)
записи будут добавляться по нескольку в один день
данные буду поступать по требованию 1-2 раз в месяц, потом раз в квартал. Потому особая точность не нужна :)
Единственное, что может буквы(их всего 16) дабавлятся или удалятся в неделю по несколько раз, но к моему проекту это не относится, т.к. делается на стороне сервера


Сообщение отредактировано
Сергей - Вт, 10 Мая 2011, 20:19
 
Сообщение
Quote (Alien)
я думаю нужно просто дописать
ппц, а я два дня голову ломал :D
А ведь надо было-то заполнить на новую :D
Спасибо, ты настоящий математик :) Вроде работает, дальнейшее покажет, т.к. данные поступают по разному...
Quote (Alien)
да и кстати у тебя там опечатка
да, очепятка :) Код несколько раз переписывался, вот глаза и замылились
Quote (DEMBEL)
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.
Quote
DateToNum "30.12.2010" --> 40542
DateToNum "30.01.2011" --> 40573
DateToNum "30.02.2011" --> Error
DateToNum "30.03.2011" --> 40632
Старая дата имеет меньший стамп, только непонятно почему в 3 варианте ошибка :(

Добавлено (10 Май 2011, 20:14)
---------------------------------------------

Quote (Сергей)
только непонятно почему в 3 варианте ошибка
не виноват я, пиво само пришло :D
30 марта, т.е. никогда :)

Добавлено (10 Май 2011, 20:17)
---------------------------------------------

Quote (ip19216811)
записи будут добавляться по нескольку в один день
данные буду поступать по требованию 1-2 раз в месяц, потом раз в квартал. Потому особая точность не нужна :)
Единственное, что может буквы(их всего 16) дабавлятся или удалятся в неделю по несколько раз, но к моему проекту это не относится, т.к. делается на стороне сервера

Автор - Сергей
Дата добавления - 10 Мая 2011 в 20:17
DEMBELДата: Вт, 10 Мая 2011, 20:46 | Сообщение # 10
Наш дизайнер


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщение

Автор - DEMBEL
Дата добавления - 10 Мая 2011 в 20:46
Форум NeoBook » Всё о программе NeoBook » Общие вопросы по NeoBook » Определить большее число
  • Страница 1 из 1
  • 1
Поиск: