Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Надо заменить данные на новые, если дата больше имеющиеся.
Моей фантазии хватило на это
ClearVariables "" LoadVariables "[PubDir]param.txt" GetArrayInfo "[aEvDat]" "" "[count]" "" Loop "1" "[count]" "[i]" ....Если пусто, то назначаю минималку, чтоб не было ошибок в DateToNum If "[aEvDat[i]]" "=" "" SetVar "[aEvDat[i]]" "1.1.1900" EndIf
If "[dData_[aEvTxt[i]]]" "=" "" SetVar "[dData_[aEvTxt[i]]]" "1.1.1900" EndIf
.Входящие данные DateToNum "[aEvDat[i]]" "Default" "[nIn_[aEvTxt[i]]]" .Данные которые уже есть DateToNum "[dData_[aEvTxt[i]]]" "Default" "[sIs_[aEvTxt[i]]]"
If "[nIn_[aEvTxt[i]]]" ">" "[nIs_[aEvTxt[i]]]" If "[nIn_[aEvTxt[i]]]" ">" "2" SetVar "[newData_[aEvTxt[i]]]" "[aEvDat[i]]" EndIf Else If "[nIs_[aEvTxt[i]]]" ">" "2" SetVar "[newData_[aEvTxt[i]]]" "[dData_[aEvTxt[i]]]" EndIf EndIf EndLoop
все вроде работает, но появилась проблема… Входящие данные, оказалось, могут быть и такими
Опять с математикой не дружу... Второй день голову ломаю, никак не соображу.
зато с сочинением рифм у тебя все в порядке
Первый раз у тебя 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) --------------------------------------------- да и кстати у тебя там опечатка
В Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать
Сообщение отредактировано ip19216811 - Вт, 10 Мая 2011, 16:54
В Unix формат переводить и потом сравнивать даты тайм штампа будет проще, то есть если число больше то файл имеет более позднюю дату то есть он новый. Только учтите проблему 2038 года прежде чем делать
Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.
ПыСы А этот код насколько я понял с Юникс форматом не имеет ничего общего
да, вы говорите о разных вещах, timestamp в нб считается как кол-во ДНЕЙ с 30 декабря 1899г. Поэтому здесь минимально чувствительная разница в сутки (отсюда могут быть ошибки если требуется более точное определение, но в случае сабжа вроде не должно).
Quote (Сергей)
То в массив новой даты попадает меньшая дата.
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.
Добавлено (10 Май 2011, 19:12) ---------------------------------------------
Quote (DEMBEL)
кол-во ДНЕЙ
видимо столь "элегантно" обошли проблему учитывания временных зон, если бы использовался Unix timestamp Как задавать вопросы
Не буду влазить в спор, но похоже или я чего то не понял, или Вы не так поняли про что говорю я. Я имею в виду получение количества прошедших секунд относительно 01.01.1970. Соответственно большее число в формате Юникс будет более новым, так как количество секунд с 01.01.1970 пройдет больше, чем у более раннего файла.
DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.
DateToNum переводит дату в количество дней с даты 30 декабря 1899г., как и сказал уже DEMBEL. Я не знаю откуда взята такая дата. Суть в том что здесь посекундный формат не требуется, т.к. дата тут ограничивается только днями.
Всегда надо думать про будущее, сейчас только днями, а потом мало ли записи будут добавляться по нескольку в один день вот тогда и пригодиться Юникс время.
ппц, а я два дня голову ломал А ведь надо было-то заполнить на новую Спасибо, ты настоящий математик Вроде работает, дальнейшее покажет, т.к. данные поступают по разному...
Quote (Alien)
да и кстати у тебя там опечатка
да, очепятка Код несколько раз переписывался, вот глаза и замылились
Quote (DEMBEL)
проверь еще раз как сравниваешь. Меньшее число стампа соотв. более старой дате.
Старая дата имеет меньший стамп, только непонятно почему в 3 варианте ошибка
Добавлено (10 Май 2011, 20:14) ---------------------------------------------
Quote (Сергей)
только непонятно почему в 3 варианте ошибка
не виноват я, пиво само пришло 30 марта, т.е. никогда
Добавлено (10 Май 2011, 20:17) ---------------------------------------------
Quote (ip19216811)
записи будут добавляться по нескольку в один день
данные буду поступать по требованию 1-2 раз в месяц, потом раз в квартал. Потому особая точность не нужна Единственное, что может буквы(их всего 16) дабавлятся или удалятся в неделю по несколько раз, но к моему проекту это не относится, т.к. делается на стороне сервера
Сообщение отредактировано Сергей - Вт, 10 Мая 2011, 20:19