:: Visual Foxpro, Foxpro for DOS
хулиганский прием
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Сижу, модифицирую чужой проект,
написанный сотрудницей, ушедшей на пенсию в 80
лет
Вижу такой перл
do &imfile with &parr
Вылетает ошибка синтакиса уже при выполнении
Заменяю на do (imfile) with (parr)
Снова ошибка , но уже в программе , имя
которой в переменной imfile
Там на входе объявлено 3 параметра
При вызове через & фокс раскидывает переменную
parr на три параметра сам, а при вызове через ()
передает только в одну.
Всегда старался пользоваться & по минимуму.
Сижу и думаю, как бы это так переписать, чтобы не валилось
Ratings: 0 negative/0 positive
Re: хулиганский прием
AngelOKES

Сообщений: 828
Дата регистрации: 08.02.2012
if...else
try...catch
Ratings: 0 negative/0 positive
Re: хулиганский прием
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Хочешь прикол? ;)

Посмотри, что вернет процедура, к примеру, такая, похожая на твой пример...
imfile="pro"
parr="1,2,3"
do &imfile with &parr
***
PROCEDURE pro
PARAMETERS one, two, fre
WAIT one+two+fre wind

а потом подставь в переменную parr, например, такие значения
parr="i1,i2,i3"
Занавес

Но, если сделать так...
parr="'i1','i2','i3'"
хоть так...
parr="'1','2','3'"
то заработает и минимум переделок

P.S.
boba
Всегда старался пользоваться & по минимуму
Я довольно часто в своей практике использовал макроподстановку, в основном для максимальной унификации удаленного кода, менять который можно было просто подставляя отдельный текстовик или бинарник (если спрятать хотелось) для считывания с него нужных строчек.
Сначала на грабли наступал частенько, потом постепенно в голове сложился четкий алгоритм возвращаемых макроподстановкой в коде значений и ошибки исчезли.


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.




Исправлено 5 раз(а). Последнее : Chemberzhy, 22.09.21 13:40
Ratings: 0 negative/0 positive
Re: хулиганский прием
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Все верно, так тетка и передает с апострофами и запятыми
Но тут где-то выше ошиблась,
один параметр был без апострофов
Само тело параметра формируется не в одном месте,
все искал на ощупь.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
поставь таймер, в котором пропиши проверять количество апострофов в этой переменной и как только их станет меньше 6, пусть он тебе свистнет, хотя, если на следовала той же логике, что и я, собирая такие переменные по коду, то проще искать по количеству запятых: как только их стало 3, проверить сколько апострофов, если не 6, то звоночек.


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.




Исправлено 2 раз(а). Последнее : Chemberzhy, 22.09.21 21:30
Ratings: 0 negative/0 positive
Re: хулиганский прием
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Chemberzhy
а потом подставь в переменную parr, например, такие значения
parr="i1,i2,i3"
Занавес

А что тут иное ожидалось?
Для выполнения команды
DO pro WITH i1,i2,i3
требуется наличие переменных i1, i2 и i3 доступных в том месте где эта команда исполняется.
Макро именно к такому виду и приводит команду.

В случае затруднений, вероятно, проще собирать команду целиком (не по частям, т.е.
cmd = "DO " + m.imfile + " WITH " + m.parr
) и потом уже выполнять через "голое макро"
&cmd
Так будет возможность скинуть в лог или просто на экран вывести созданную команду "целиком" - думаю тут уже не должно возникнуть затруднений в понимании что к чему


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: хулиганский прием
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
или так:
cmd = "DO &imfile WITH &parr"
&cmd
Ratings: 0 negative/0 positive
Re: хулиганский прием
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Так проблема не сборки макроподстановки у Владимира, а в поиске точки в коде, где забыли в строку апострофы вставить ;)


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: хулиганский прием
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
В отладчике поставить Breakpoint на переменную, значение которой требуется контролировать - так и проверять, когда в нее будет записано "не то".
Это если ошибка легко воспроизводима.



Исправлено 1 раз(а). Последнее : akvvohinc, 23.09.21 16:44
Ratings: 0 negative/0 positive
Re: хулиганский прием
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Не в курсе, как в VFP, а в FPD отладчик совсем неважно работает с макроподстановками.
Ratings: 0 negative/0 positive
Re: хулиганский прием
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Макро здесь ни при чем.
Контролировать можно значение любой переменной, в том числе и той (тех), которые лежат в основе макро.
Программа остановится, когда значение переменной изменилось, далее смотришь ее новое значение.
Если знаешь, что в ней должно быть, а чего не должно, то ошибка найдется быстро, если само ее появление регулярно.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Круто конечно с контролем значения переменной...
Для первого класса ЦПШ. Если программа абсолютно плоская. А если эта переменная пришла как параметр?

При ошибке останавливать и смотреть стек вызовов и не иначе.
Ratings: 0 negative/0 positive
Re: хулиганский прием
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Я не говорил, что нельзя поставить "Останов" на нескольких переменных.
В любом случае ошибки такого рода вряд ли потребуют более получаса поисков - пусть даже автору будет не 80 лет, а 180.
Главное, чтобы она была регулярна.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
В FPD всё намного проще. Берёшь Far, и ищешь в *.prg то, что тебя интересует. [sm128]
Ratings: 0 negative/0 positive
Re: хулиганский прием
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Так если предполагается поиск вверх место зарождения переменной, то не проще ли без всяких отладчиков проверить и слегка рефакторить код чтоб уйти от макро?
Ratings: 0 negative/0 positive
Re: хулиганский прием
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Simple777
В FPD всё намного проще. Берёшь Far, и ищешь в *.prg то, что тебя интересует. [sm128]

Я тебя удивлю, но в vfp это тоже можно, причём встроенными средствами.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Но в VFP код ведь не только в *.prg

Оно,конечно, и в FPD код может быть в *.frm и др. Но у меня токмо в *.prg
Ratings: 0 negative/0 positive
Re: хулиганский прием
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Есть инструмент ищет по всему проекту, в том числе формах, классах и ест. в прг.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Можно и ручками
Use ...
Scan for "..."$"..."
;)


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: хулиганский прием
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Chemberzhy
Можно и ручками
Use ...
Scan for "..."$"..."
;)

Конечно пока не надоест.
Я накидал себе поисковик. Ищет во всех возможных файлах, куча фильтров. Оформил как com-exe-server.
Запускается из ide фокса, но в отдельном процессе/потоке.
Т.е. когда запустил непосредственно поиск, то в самом ide можно продолжать работать.
Когда поиск отработает будет сформирован список файолов и найденных строк. Дабл-клик и файл открывается в ide из которой и запустили на найденной строке.
Есть возможность открыть все найденные файлы одной кнопкой.
Ratings: 0 negative/1 positive


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

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

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