:: Visual Foxpro, Foxpro for DOS
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
lulgu
Королеву Игорю!(Предполагается, что и Сфинкс будет познавать)
FOR i = 1 TO 100
lcParam = 'p' + ALLTRIM(STR(i))
&lcParam = ALLTRIM(STR(i))
ENDFOR
of63 : - lulgu, все тут более-менее владеют макросами lcParam,&lcParam, и Empty-обьектами. Про 26 параметров (принципиально максимальное количество параметров). Чего нового-то им скажешь?
- Владеть то владеют, но напомнить лишний раз не грех.

Цитата:
Принимают парня в профтехучилище
- Насколько Вы математику знаете?
- Ну, дважды два - 4, трижды три - 9
- А чему синус 30 градусов равен?
- Ну, в общем, дважды два - 4, трижды три - 9
- Простите, а причем тут это?

- Напомнить лишний раз не грех

Сначала я как-то прибалдел, но сегодня в норме и без допинга. Здорово! По украински "це щиро та й відверто"
И многое можно простить. За стремеж к знаниям



Исправлено 10 раз(а). Последнее : Ydin, 09.12.17 19:41
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
По той фигне, что я кинул. Я там чисто лоханулся. Говнекод, кот. работает.
На печати документа в Фреймворке - вставляем код в методе "Before", т.е. перед работой макета (в основном Иксел).
В нем определяем Empty объект, скажем, loParams, в нем собрание реквизитов, которые, в основном в шапках страниц -
даты, периоды (дата1-дата2) в разных форматах, всякие реквизиты предприятия, может, реквизиты партнера и еще воз без маленькой тележки.
За 26, порой переходит. Такое собрание констант/переменных.
Потом, там в макете их можно использовать по имени через точку. Например, .MFO
Если говорить, что параметры передаются по значению (не по ссылке), то можно представить Сфинксу, такое
priv loParams
m.loParams = <определяем и заполняем простой объект его свойствами>

WITH loParams
do SomeFunc with <то, что не вошло в объект>
ENDWITH

А там в этой SomeFunc через точку есть все, кто в объекте, даже, если их 260, а не 26
А те, кто передается по ссылке - через Do SomeFunc with @Some1,@Some2,...

Но я так не делал. У меня параметров больше 8, может и нет



Исправлено 5 раз(а). Последнее : Ydin, 09.12.17 21:26
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Ydin
Сначала я как-то прибалдел ...

С чего это вы так красочно забалдели.
Просто напомнил ИК, что циклы возможны не только с массивами.
К тому же akvvohinc тут же предложил более развитую версию.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Нет, читай внимательно. У тебя еще все впереди, я в это верю.
Но наивность в таких напоминаниях надо как-то устранять.
Скажи себе, что эти ребята на Форуме, может, это и так знают.
Просто, по-мелкому, не пишут. Может смеются в ответ или, наоборот...
Если ИК вот так учить на уровне "дважды два", то лучшее - это не получать ответы.



Исправлено 3 раз(а). Последнее : Ydin, 11.12.17 10:07
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
lulgu
К тому же akvvohinc тут же предложил более развитую версию.
Нервы железные или просто очень отзывччивый Но это когда-то кончается



Исправлено 4 раз(а). Последнее : Ydin, 10.12.17 11:03
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Ydin
Нет, читай внимательно ...

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



Исправлено 1 раз(а). Последнее : lulgu, 09.12.17 21:46
Ratings: 1 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
sphinx
Я так и не понял, чем цикл стал хуже 100500 вызовов.

Цикл используется для обработки однородного массива информации ("массив" не буквально - это и коллекция, и в фоксе тот же курсор).
Если информация НЕ представлена в таком виде, то использовать цикл невозможно. Смысла же запихивать таким образом предоставленные параметры в массив/коллекцию - ну крайне маловероятно что это хорошее решение.
Я ещё раз повторюсь - массив/коллекция БУДЕТ нормальным вариантом, если исходные данные будут СРАЗУ поступать не в виде набора разрозненных параметров. Перегонять же непойми что в массив только для того чтобы затем использовать цикл - занятие безрассудное.
Если "параметры" это формализованно названные объекты (скажем, динамически добавленные на форуму контролы - с "шаблонными" именами - так что можно применить те или иные методы для косвенных ссылок - GETPEM, EVALUATE, макро в конце концов) - то в принципе, конечно, можно и цикл использовать - только для него не нужно никаких массивов/коллекций сооружать.
Если бы была озвучена ВСЯ задача, можно было бы что-то разумное предложить, а так - гадать бессмысленно, а в "чистом" виде такой костыль (перегонять "параметры/переменные" в массив/коллекцию) попросту является убогим куском кода.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
spinz
Автор

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
Если бы была озвучена ВСЯ задача
Сильно подозреваю, что в данном случае речь идет не о решении конкретной задачи, а о создании некоего общего механизма.



Исправлено 1 раз(а). Последнее : spinz, 10.12.17 14:30
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Тем более - прописать сразу в спецификации что именно "массивами" сей механизм кормится, а не p1,p2,...p100500


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
sphinx
Я так и не понял, чем цикл стал хуже 100500 вызовов. Наверное модным стало раскрывать циклы, но мне не сказали. Забыли наверное.
Не в этом вопрос. Вопрос в том, как ты умудрился получить 100 параметров вне какой бы то ни было гомогенной коллекции.
Ratings: 1 negative/2 positive
Re: Как можно обойти ограничение в 26 параметров?
sphinx

Сообщений: 31178
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Паша, да ладно тебе. Я уже написал, что "проблему" решил, красиво (хотя все равно говно-код, ну да ладно).

Но чисто спортивно все же хочется понять, как красиво сделать, если в коде программы тебе надо в какую-то функцию передать значения "String_1", "String_2", "String_10". Ну, я-то все в ИНИ-файле держу, вычитаю без проблем. А если надо? (Ну мало, ли.. те же вопросы совместимости с чужим кодом, чтобы не писать новую идеологию).

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

Вложение коллекции в коллекцию - это тоже костыль (ИК бы сказал порезче, он в последнее время всем диагнозы ставит).

Передача через массив.. так если есть в массиве - занафига массив в коллекцию для этого перегонять?

Через XML - ну это может для каких-то специфичных вещей, а так-то тоже костыль. И на эту тему писали здесь.

Вот так хочется человеку - запрятать обработку нескольких значений в коллекцию. Так или иначе хорошего решения все же нет.

А свою проблему, которая была изначально основана на его методе - я передала погибче. Но это все равно говнокод. Даже приводить его не буду. ;)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Рабочий говнокод по результату, т.е. по его соответствию назначению не отличишь от доброкода. Это секрет писателя.
Когда-то забил гол за нашу пенсионерскую команду, что для меня было редкостью.
И признался, что "неудачно" отдал пас. Мне сказали, что в этом признаваться нельзя.
Такое правило.



Исправлено 3 раз(а). Последнее : Ydin, 11.12.17 20:57
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
sphinx
Паша, да ладно тебе. Я уже написал, что "проблему" решил, красиво (хотя все равно говно-код, ну да ладно).
Но чисто спортивно все же хочется понять, как красиво сделать, если в коде программы тебе надо в какую-то функцию передать значения "String_1", "String_2", "String_10". Ну, я-то все в ИНИ-файле держу, вычитаю без проблем. А если надо? (Ну мало, ли.. те же вопросы совместимости с чужим кодом, чтобы не писать новую идеологию).
В этом-то и дело. Даже если внешняя функция построена целиком на вызове подфункции с неким набором констант, нормальный программист рефакторит набор констант в какой-нибудь внешний файл (INI, DBF), без разницы. Причём это происходит гораздо раньше чем количество констант перевалит первый десяток.
Собственно, ты к этому и пришёл, в конце-концов. Если я правильно понимаю по обрывкам информации.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
spinz
Автор

Сообщений: 5263
Дата регистрации: 21.01.2016
pasha_usue
Даже если внешняя функция построена целиком на вызове подфункции с неким набором констант, нормальный программист рефакторит набор констант в какой-нибудь внешний файл (INI, DBF), без разницы. Причём это происходит гораздо раньше чем количество констант перевалит первый десяток.
Ересь какая-то.

Если функа вызывается тысячи раз в секунду, то оверхед при чтении из файла будет запредельным
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
С ini-файлом никаких премудростей не нужно, достаточно одной процедуры.
Где этот файл обрабатывается как текстовый функциями низкого уровня (FOPEN ...) и значения в цикле сразу направляются куда нужно.
Если структура файла проста, то можно через FILETOSTR() привести к виду, удобному для GETWORDCOUNT/GETWORDNUM, но из-за ограничений придется делать двойной цикл.



Исправлено 2 раз(а). Последнее : lulgu, 11.12.17 23:51
Ratings: 1 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
spinz
Автор

Сообщений: 5263
Дата регистрации: 21.01.2016
Задефайнить константы в отдельном заголовочном файле много проще и быстрей вычитывания их из файла.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
spinz
Задефайнить константы в отдельном заголовочном файле много проще и быстрей вычитывания их из файла.

Неясно происхождение ini-файла, но в вашем варианте проще использовать .txt-файл "столбиком" без #DEFINE, тогда будет более удобна пара MEMLINES/MLINE.
Потому что с .h-файлом нужна постоянная перекомпиляция проекта.



Исправлено 1 раз(а). Последнее : lulgu, 12.12.17 00:32
Ratings: 1 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
spinz
Автор

Сообщений: 5263
Дата регистрации: 21.01.2016
Какой смысл вычитывать константы из файла во время выполнения, если это можно сделать на этапе компиляции.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
vic7tar

Сообщений: 48
Дата регистрации: 27.02.2017
Уж если запихивать эти константы во внешние файлы, по-моему, лучше dbf-а не придумаешь.
Ratings: 0 negative/0 positive
Re: Как можно обойти ограничение в 26 параметров?
sphinx

Сообщений: 31178
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
vic7tar
Уж если запихивать эти константы во внешние файлы, по-моему, лучше dbf-а не придумаешь.

Весьма спорное утверждение. В INI-файле даже юзер может что-то поменять, если, допустим, в отпуске ты за три моря. А объяснять, чем открыть DBF-файл, где это скачать и как установить - тоже можно, но не в пример дольше.

И там, и там есть свои плюсы, есть свои минусы.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive


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

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

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