:: Visual Foxpro, Foxpro for DOS
Re: targrid
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
спасибо огромное! теперь все работает!
Ratings: 0 negative/0 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
не пойму каким образом оно "," преобразовывает в ".", ведь все переменные идут в виде "0,000"
Никакие числовые переменные не идут в виде "0,000" - они только показываются вам с тем разделителем, который выставлен в настройках.
А вот числовые константы, которые вы используете в программе, должны быть написаны только через "."

Ну, а функция STR(), преобразующая число в строку, использует (такова её особенность) тот символ-разделитель, который указан в настройках - она же не знает, что позже вы вновь захотите использовать это число-строку как числовую константу. Вот ей в данном случае и надо помочь.
Ratings: 0 negative/1 positive
Re: targrid
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
akvvohinc
Дополню.
Для универсальности лучше не запятую подменять на точку, а тот символ-разделитель, который выставлен в настройках SET POINT - мало ли каким он может быть:
CHRT(value,SET('POINT'),'.')
Угу.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: targrid
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
ventall
спасибо огромное! теперь все работает!
В том числе и представленное в виде информации к размышлению?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: targrid
ventall
Автор

Сообщений: 132
Дата регистрации: 29.11.2013
а там не понял, иногда тот фильтр не сбрасывался, но нам важнее выставиль фильтр и откинуть 0 или отобразить остатки товара с 0 , а потом чаще всего форму печатают, и делают заказ поставщику...
Ratings: 0 negative/0 positive
Re: targrid
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
ventall
а там не понял,
А зря. Там показано как одной строкой заменяется все закомментированное. Заодно избавляя от макроподстановки. И значительно быстрее. Ибо нет макро и выполняется одной встроенной командой, а не кучей вызовов.
И вообще, в остальных местах циклы бегания по объектам типа Tarheader2 заменяются на такой:
If Type(".TH1")="O"
For Each loTH In .Controls
With loTH
If .Class == 'Tarheader2'
<тут что-то делаем с очередным объектом>
Endif
Endwith
Next
Endif
Короче, быстрее, легче в отладке.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: targrid
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() за макро - выражение
Упражнения с макро

m.x = "_TALLY"
m.x = EVAЛ(m.x) && N-значение, да, громоздко, но

* еще
m.x = 1
m.x = ALLTRIM(STR(m.x)) && X - было число, стала строка
m.x = "m.имя" + m.x && тип переменных подсказывает, что хотел автор - прочитать переменную под именем "имя1"
m.x = EVALUATE(m.x) && или m.x = &x

Фокс - своеобразныей "синтаксически" язык
Ratings: 0 negative/1 positive
Re: targrid
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
of63
() за макро - выражение
Упражнения с макро

m.x = "_TALLY"
m.x = EVAЛ(m.x) && N-значение, да, громоздко, но

* еще
m.x = 1
m.x = ALLTRIM(STR(m.x)) && X - было число, стала строка
m.x = "m.имя" + m.x && тип переменных подсказывает, что хотел автор - прочитать переменную под именем "имя1"
m.x = EVALUATE(m.x) && или m.x = &x

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


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/2 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
of63
m.x = ALLTRIM(STR(m.x)) && X - было число, стала строка
С некоторых далёких пор такие конструкции можно заменять на:
m.x = TRAN(m.x)
Ratings: 0 negative/1 positive
Re: targrid
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
akvvohinc
of63
m.x = ALLTRIM(STR(m.x)) && X - было число, стала строка
С некоторых далёких пор такие конструкции можно заменять на:
m.x = TRAN(m.x)
С заменой ALLTRIM(STR()) на TRANSFORM() полностью согласен.
А вот с использованием для всего и вся только одной переменной, которая по ходу работы программы меняет свой тип - не соглашусь.
Но спишем пока всё на особенности товарища Олега, это его "фишка"


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
А вот с использованием для всего и вся только одной переменной, которая по ходу работы программы меняет свой тип - не соглашусь.
В целом - да, но это сильно зависит от "контекста".
Скажем, если числовой X больше не может понадобиться, то большого смысла заводить для строки ещё одну переменную я не вижу. Тем более, если переменная имеет такое "непонятное" имя как "просто Х".

В конце концов, дело не только в типе.
Когда мы пишем:
s = CHRT(s,'abc','xyz')
то мы не меняем тип, но сохранять ли результат в ту же переменную или в новую, зависит в большой степени от того, пригодится ли нам ещё её исходное значение.

Иными словами, вводим ли мы тем самым "новое понятие" или просто меняем значение (а иногда и тип) существующего.
Во всяком случае, таков мой подход к этой "проблеме".
Ratings: 0 negative/1 positive
Re: targrid
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Про m.x сказал, скажи и про m.i скажи тогда. Как ты назовешь переменную в FOR ? Естественно I (m.i), а не iCountThisFor, потомучто перегрузка глаза.... хотя, кому как...

>вводим ли мы тем самым "новое понятие" или просто меняем значение (а иногда и тип) существующего.
нет, просто эстетика (у каждого своя) программерства, Серега

() тут еще примешивается в восприятии значительность/незначительность переменно (и даже константы PUBLIC)
чаще пишу в коде момент неактуальности переменной, типа "RELEASE I", ну или , порабочекресстяьнски RELEASE m.i (это одно и тоже с предыдущим, в условностях фокса). Этот RELEASE даетвозможость узнать, при поиске в текстовом редакторе... Надоело писать )



Исправлено 2 раз(а). Последнее : of63, 11.03.23 21:05
Ratings: 0 negative/0 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
нет, просто эстетика (у каждого своя) программерства, Серега
Не знаю ничего про "эстетику программерства", но могу пояснить, что я имел в виду:

1) когда ты принимаешь некий параметр, например, "количество чего-то там" в виде строки, и тут же меняешь тип, преобразовывая его к числу, ты не создал "новое понятие" - как было у тебя "количество чего-то там", так оно им и осталось.
И если та строка тебе больше не потребуется, то я бы не стал создавать новую переменную, несмотря на то, что её тип изменился:
qty = VAL(qty)

2) и совсем другое дело, когда ты принимаешь "количество чего-то там", проводишь над ним некие действия, а результат, который "количеством" уже не является, сохраняешь в той же переменной, мотивируя тем же - исходное значение больше не пригодится:
val123 = some_function(val123) && получили "массу чего-то там"
Ratings: 0 negative/0 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Про m.x сказал, скажи и про m.i скажи тогда. Как ты назовешь переменную в FOR ?
Зависит от того, насколько мне важно внутри цикла понимать, что именно здесь меняется.

Обычно это может быть важно, если "внутренности" цикла не охватываются одним взглядом, а цикл - не один, а несколько вложенных и по разным объектам - например, книга, страница, слово.

И тогда вместо i, j, k я предпочту что-то более понятное - nobook, nopage, noword, даже если речь идёт о сканировании массивов, имеющих имена abook, apage, aword.
И когда мне нужно будет обратиться к элементу массива apage, мне не придётся думать, какую букву из набора (i, j, k) надо с ним использовать.

Я уж не говорю о двумерных массивах, где нередко появляется желание знать, что есть что.

К тому же, переменные управления циклом не всегда используются как индексы массивов, и в этих случаях обезличенные (i, j, k) ни писать, ни понимать написанное не помогут, Например, ты генеришь URL-ы страниц какого-то сайта для последующего чтения, которые отличаются параметрами:
url_pic = 'https://.............php?&page=###&q=1'

Здесь я предпочту использовать переменную nopage в цикле по номерам страниц, которую и буду подставлять в адрес вместо ### (даже если цикл один и он прост):
url = STRT(url_pic,'###',TRAN(m.x))
url = STRT(url_pic,'###',TRAN(m.nopage))



Исправлено 2 раз(а). Последнее : akvvohinc, 12.03.23 04:38
Ratings: 0 negative/0 positive
Re: targrid
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Понял склад мысли! ) раз мозгу нужно доп. символика кроме собственно обозначения, символа (не i, а nobook), то... раз у тебя так, то так, но, ... не буду про "но". Серега, тебя читаю с интересом!
Ratings: 0 negative/0 positive
Re: targrid
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Я уж не говорю о двумерных массивах, где нередко появляется желание знать, что есть что.

А как ты относишься к такому упрощению:
#DEFINE iМатрешкиЦвет Матрешки[m.i, 1] && в таком DEFINE-обращении к массиву приходится оговаривать индекс (строку) - I, но это не трудно выполнить, когда "все однобуквенные переменные приватные в функции" (я такой парадигме следую, "своей" PRIVATE ALL LIKE ?)
#DEFINE iМатрешкиКод Матрешки[m.i, 2]
#DEFINE iМатрешкиВес Матрешки[m.i, 3]
...
m.i = ... && да, недостаток DEFIN-а, надо заряжать переменную I... Я потому так и назвал дефин с I - iМатрешки...
X = iМатрешкиЦвет



Исправлено 1 раз(а). Последнее : of63, 17.03.23 21:53
Ratings: 0 negative/0 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
of63
А как ты относишься к такому упрощению
Сложно сказать, насколько это удобно, так как никогда не пользовался чем-то подобным - вопрос привычки, я думаю.
Но сейчас для такого случая я бы просто создал курсор, а не массив.

Когда-то в ДОСе ограничение на количество открытых файлов могло этому мешать, да и скорость работы с дисками тогда была существенно ниже.
Сейчас у меня нет таких задач, где бы разница в скорости работы с массивами и курсорами была настолько важна, чтобы предпочесть массив.
Ratings: 0 negative/0 positive
Re: targrid
of63

Сообщений: 25253
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
"Бесконечность не предел" (Баз Светик) )
Фокс в принципе тормозной ЯП, нетормозные, кроме C,CPP без извратов, - только есть "быстрый" (ассемблер идеален, но это сложно для входа в программирование, сейчас не знаю кто потратит время на освоение специфической системы команд спецапроца... это печально, за это надо бороться, за специфику некоторых тонких вехей, кроме аромата духов, или аромата кварков, есть техническая, "процессорная", специфика, которую поддерживают не только нидерланды (=америка в этом деле), азиаты). По практике - всё тормозное, ВСЁ, если не тормозное , то не хватает каких-то "привычных" збс-подсказок, умолчаний. Не тормозное - это что-то простое как камень (вернуть время UTC что-ли, и то, можно дое... чтобы сделать эту функцию неверной, если заморочиться на время, точнее, чем пересылки пакетов, на время радиосигнала, на промежуточные спутники, рассылающие его... Хотя есть GPS, GLONASS, там это решено без интернета слб...
Ratings: 1 negative/0 positive
Re: targrid
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
akvvohinc
1) когда ты принимаешь некий параметр, например, "количество чего-то там" в виде строки, и тут же меняешь тип, преобразовывая его к числу, ты не создал "новое понятие" - как было у тебя "количество чего-то там", так оно им и осталось.
И если та строка тебе больше не потребуется, то я бы не стал создавать новую переменную, несмотря на то, что её тип изменился:

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

FUNCTION SomeFun(tcQty) && здесь объявляется что параметр это строка символов
tcQty = VAL(tcQty) && но здесь она уже хранит числовое значение
*...
return
* или
FUNCTION SomeFun(tnQty) && здесь объявляется что параметр это числовое значение но передавать надо строку
tnQty = VAL(tnQty) && с какого-то конвертируем число вчисло
*...
return
Ratings: 0 negative/0 positive
Re: targrid
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Но если придерживаться венгерской нотации, как это рекомендует документация на VFP, то возникнет путаница, особенно при командной работе.
Может быть.

Но я начал "что-то писать" еще в институте в начале 80-х с ЕС и до знакомства с Фоксом, и нам такое не преподавали - так что мои переменные ей не следуют.
А по командной работе - большую часть трудовой деятельности я провел в таких конторах, где такого понятия и не было, я был самым молодым, а остальные вообще были самоучками, так что путаница возникала, но по большей части не из-за имен переменных.
Ratings: 0 negative/0 positive


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

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

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