:: Visual Foxpro, Foxpro for DOS
Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Допустим, есть такая прога myprog.prg

Set date Brit
Set cent on
m.a={01/05/2018}
?m.a
susp

Не могу понять, почему присваивается в дате 5 января 2018 года, а не 1 мая 2018 года. :al:

И config.fp пробовал отключать. И в отладчике смотрел. Причем если после отладчика еще раз сделать присвоение, то присваивается правильно.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
А из чего по твоему коду видно, что в результате получается 5 января 2018 года?
Ты хочешь сказать, что при выводе видишь
05/01/2018
?

Но в любом случае у меня такого не происходит, я вижу
01/05/2018

А проверять надежнее так:
? DAY(m.a), MONTH(m.a), YEAR(m.a)
ведь на формат вывода даты влияет SET DATE.

Рискну предположить, что в реальной проге у тебя SET DATE BRIT не стоит, а по умолчанию используется AMERICAN.



Исправлено 2 раз(а). Последнее : akvvohinc, 02.06.18 15:55
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Интересно.
На 9ке
Set date Brit
Set cent on
m.a= {^2018/05/01}
?m.a
выдает 01/05/2018
Set date MDY
m.a= {^2018/05/01}
?m.a
выдает 05/01/2018
Принять как данность))) Не знаю, есть ли в 2.6 MDY


------------------
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Интересного здесь нет - результат ты получил один и тот же.
А формат даты при выводе разный, так как определяется установкой SET DATE.

Но в FPD такого нет:
m.a= {^2018/05/01}

Там и формат даты при присвоении определяется установкой SET DATE.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
{01/05/2018} это литерал задающий дату. Как таковой он обрабатывается компилятором и в объектный код попадает уже значение даты, а не вот это его текстовое представление. Соответственно на то как именно будет обработан этот литерал, влияет установка SET DATE на момент компиляции, а не во время исполнения кода. Под отладчиком может быть и по другому, хотя в VFP всё равно берётся значение из объектного кода - конечно же если он существует и не "устарел" (т.е. исходник не изменялся после предыдущей компиляции)
Я не помню можно было ли в FPD в функцию DATE передать 3 параметра и получить совершенно однозначный результат, вне зависимости от установок SET DATE/CENTURY ни на момент компиляции ни на момент исполнения. Если возможно - то именно так и следует задавать любые "статические" даты.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Игорь поставил правильный диагноз.

У тебя в Config.FP нет установки
DATE = ...

Поэтому по умолчанию подразумевается AMERICAN, при которой и происходит компиляция проги.
То есть фактически в FXP дата не та, что ты "как бы" написал, думая, что пишешь ее при SET DATE BRITISH.

После отработки проги SET DATE устанавливается в BRITISH, поэтому дальнейшие манипуляции приводят к правильному результату.
Но без перекомпиляции при подходящем SET DATE (German, British, DMY и т.п.) прога всегда будет "врать".

Советую всегда включать нужный DATE в Config.FP.

Ну, или на худой конец использовать другой способ присвоения:
m.a = CTOD('01/05/2018')
Тогда твой BRITISH сработает вовремя.



Исправлено 3 раз(а). Последнее : akvvohinc, 02.06.18 19:04
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Поставил в config.fp

date = brit


Ничего не изменилось. Дата присваивается некорректно.

То, что можно присваивать m.a = CTOD('01/05/2018'),конечно, знаю.

Но просто хочется понять, почему такая странная заморочка.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
Simple777
Допустим, есть такая прога myprog.prg
Set date Brit
Set cent on
m.a={01/05/2018}
?m.a
susp

Не могу понять, почему присваивается в дате 5 января 2018 года, а не 1 мая 2018 года. :al:

Стоп. Так в British {01/05/2018} и будет 5 января, емнип (лень лезть проверять, никогда British не использовал). Если требуется привычный нам формат DD/MM/YYYY, то надо ставить German.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
А вот не надо тень на плетень наводить. SET DATE BRITISH работает как надо. И притом в качестве разделителей использует слэши, а не точки как GERMAN
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
ry
Стоп. Так в British {01/05/2018} и будет 5 января

Нет.
Это 1 мая.

Simple777
Поставил в config.fp
date = brit


Ничего не изменилось. Дата присваивается некорректно.

Надо еще перекомпилировать исходник при такой установке, ведь сам по себе FXP не изменится.

Цитата:
И притом в качестве разделителей использует слэши, а не точки как GERMAN

Соответствующие разделители - это только при выводе.
А при присваивании можно использовать почти любые, даже нестандартные типа "+", "=", ',' и т.п.



Исправлено 2 раз(а). Последнее : akvvohinc, 02.06.18 20:20
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
:bodr:

Да, после перекомпиляции работает как надо. Вообще говоря, далеко не очевидно, что для того, чтобы пользоваться в программе присвоением даты через фигурные скобки, надо прописывать формат даты в config.fp [sm128]

Да еще не забыть перекомпилироваться.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Да, после перекомпиляции работает как надо. Вообще говоря, далеко не очевидно, что для того, чтобы пользоваться в программе присвоением даты через фигурные скобки, надо прописывать формат даты в config.fp

Да, не очевидно.

Для этого надо понимать, что происходит с такой "датой" при компиляции - она преобразуется в формат даты, то есть в FXP уже нет никакого строкового представления даты - никаких 1 5 2018.
А при преобразовании во внутренний формат даты компилятор использует текущую (на момент компиляции) настройку SET DATE, а не ту, которая стоит в самой проге - та сработает лишь в Run-time.

Но если ты установишь нужный формат даты в Config.FP и не будешь без нужды менять его в окне Command или в программе на не соответствующий (British и German можно считать соответствующими, а British и USA - нет), то подобная проблема уйдет.

В VFP этой проблемы нет вообще, так как литерал типа "Дата" всегда задается в формате YYYY-MM-DD, то есть никак не зависит от SET DATE.



Исправлено 1 раз(а). Последнее : akvvohinc, 02.06.18 20:48
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
В VFP этой проблемы нет вообще, так как литерал типа "Дата" всегда задается в формате YYYY-MM-DD, то есть никак не зависит от SET DATE.
Это только в "новом" формате "с крышкой" {^yyyy-mm-dd} - "старые" форматы VFP тоже понимает (со всеми вытекающими нюансами), но уже лишь при нестандартной установке SET STRICTDATE - так то ругаться будет сильно, и не откомпилирует
Сам новый формат появился тоже не сразу - наверное в 6 версии... Не помню точно. Т.е. проблему таки признали и решили вполне эффектно - даже "неоднозначные" (но чуть более "понятные", т.к. это уже штука времени исполнения, а не компиляции) CTOD() и то слегка придушили тем же SET STRICTDATE.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Надо будет сделать поиск в FARe по маске *.prg и поискать ={

И всё к чертям резать, не дожидаясь перитонита! \m/ - поменять на CTOD().

Вроде в реальных проектах нигде фигурных скобок не использовал, а вот в "подножном" инструментарии - не исключено. [sm128]
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Честно говоря не уверен что где-либо в коде имеют смысл литералы даты отличные от 1 января, или от 31 декабря (а этот уже ругнётся при компиляции с "не той системы" set date) - да и то для "ненастоящих" дат - типа спецзначений.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Даты разные нужны,
Даты разные важны.
[sm128]

Например, дата ввода в действие нового инструктивного письма, меняющего экономические расчеты. И прочая хрень. :rux:
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Например, дата ввода в действие нового инструктивного письма, меняющего экономические расчеты. И прочая хрень.

Щас тебе скажут, что такую хрень надо держать в таблицах, а не зашивать в программу.
Ratings: 0 negative/1 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
Щас тебе скажут, что такую хрень надо держать в таблицах, а не зашивать в программу.
По хорошему - да, но кто ж у нас особо то парится по поводу "сомнительных решений"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Ежели это дата касается бизнес-логики как таковой, то да. А ежели это даты "внешних аномалий", то можно хранить нумер алгоритма в файле временных переменных, например. А юзеру предлагать выбрать из списка нужное. [sm128]

Вааще могу заверить, что "сегодня завтрак в детском саду отменяется".

Нету никаких правил. Нету.
Ratings: 0 negative/0 positive
Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
После поиска в FAR по ={01/ нашел одно сомнительное место.

Сейчас нет возможности проверить. Там есть такая конструкция:

Set date Brit
If myvar>={01/02/2013}
...
Else
...
Endi

Будет ли корректно отрабатывать сравнение? В config.fp DATE не прописывалось.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 37 (Гостей: 37)

© 2000-2024 Fox Club 
Яндекс.Метрика