Re: нужно объяснение | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Развивая мысль можно сказать что никакая функция/процедура не вызывает ошибку. А ошибку вызывает её содержимое.
|
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
С выражением имени всё то же самое - если оно будет недопустимым в данном контексте, то получишь ошибку. То же и с макро - нет никаких неоднозначностей - раскрой его и оцени правильность написания команды. Просто большинство не пытается его раскрыть ни явно, ни в воображении до тех пор, пока не получит ту или иную ошибку. И хорошо ещё, если это будет ошибка синтаксиса. |
Re: нужно объяснение | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Нет, не так. С той что в данном конкретном случае автор пытается использовать макро для подстановки одного токена-параметра, не осознавая что по факту он подставил кучу совершенно отдельных токенов туда, где ожидается всего один. И с того что замена макро на выражение имени решает проблему целиком и полностью - любое содержимое переменной (не важно правильное оно или нет, существует такой файл или нет) будет трактоваться строго как один токен-параметр "имя и путь исходного файла". Конечно же ошибки могут возникнуть и в этом случае - только это уже будут не синтаксические ошибки, а что-то типа "нет файла, занят файл, кривой путь..." Особенность макро в том что он тупо вписывает содержимое переменной в указанное место команды представленной в виде строки символов и потом заново её интерпретирует (ну или компилирует, если так будет проще). Он не угадывает желания разработчика, и не трактует переменную как нечто имеющее синтаксический смысл. Тогда как выражение имени - трактует, и не позволяет фоксу "понять" путь и имя файла как набор независимых токенов которые, кстати, вполне себе могут оказаться в итоге синтаксически корректной командой. Близкой аналогией будет использование "динамического запроса" против "параметра запроса" в SQL (не только фоксовом) - наиболее частая "дыра" позволяющая использовать SQL-инъекцию и порадовать миллионы мамкиных кулхацкеров И говорить о том что "всё дело" в правильном экранировании, санитизации, ограничении размера и использовании шаблонов ввода - это лечить симптомы вместо самой болезни. В варианте
------------------ WBR, Igor |
Re: нужно объяснение | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Какую именно ошибку - вот в чём вопрос. НЕ ошибку синтаксиса. А так то да - конечно же нельзя сложить строку с числом, или скопировать несуществующий или недоступный файл. P.S. ну и для хохмы пример инъекции для этой самой "банальной" COPY FILE.
------------------ WBR, Igor Исправлено 1 раз(а). Последнее : Igor Korolyov, 05.10.21 00:16 |
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Это "не осознавая" я бы не отнес к особенностям самого макро. Более того, я бы поставил на то, что ТС не осознавал другое - он не видел ошибки в команде:
Но если знать две вещи: 1) что происходит с командой в результате макроподстановки; 2) что команда COPY FILE в таком виде (без макро) недопустима. то сразу становится понятно - дело не в макро. Это не особенность - это и есть сама суть макро. И эта суть никак не привязана именно к этому примеру - так макро ведет себя всегда и везде, а не только при задании имени файла с пробелами. А поэтому если бы ТС не понимал суть макро, то он бы вообще не мог ими пользоваться - ни в этом случае, ни в других. |
Re: нужно объяснение | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Автор и не понимает сути макро - потому упорно пытается его впендюрить, несмотря на то что ему явно сказали что и как надо делать - БЕЗ макро.
------------------ WBR, Igor |
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: Нет, я так не считаю, нигде и никогда не ратовал за использование макро без необходимости. А то, что я не считаю, что данная ошибка была вызвана "особенностями макро", как отрицаю и само наличие у макро каких-либо особенностей - думаю, что имею право на такое мнение. |
Re: нужно объяснение | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
так я же просто узнавал почему в 1 случае ошибка а во 2 случае нет ошибки, сделано же без макро , просто не до конца понимал какой вид получается у команды при подстановки макро в данном случае |
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Значит, ты можешь нас рассудить. Тут выше говорили о том, что у макро есть какая-то "особенная особенность", из-за которой при использовании макро надо было добавить в команду COPY FILE кавычки. Что это за особенность, я так и не понял - видимо, она в том, что при макрозамене к значению переменной эти кавычки Фоксом не были добавлены (а должны были). Скажи, ты действительно не знал об этой "особенности" и ожидал, что кавычки появятся сами собой? Или иначе - на какой вид команды после подстановки ты рассчитывал? |
Re: нужно объяснение | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
x='c:\мой файл.jpg'
messagebox(x) возвращал путь полностью, я и думал что при макро будет вид примерно такой
я не понимал что не так и почему команда copy file &x выдает мне ошибку, и пока пытался сделать так чтобы заработала как то чисто случайно дошел до того что закрыл ее в скобки и все сразу заработало а кстати я в command прописывал именно в кавычках и искренне удивлялся и недоумевал да как то так, пишу в command все работает, а запускаю форму с кодом получаю ошибку
получается опыта мало пока что ну и не уверен что это какая то особенность, просто надо знать как это работает Исправлено 1 раз(а). Последнее : axeum, 05.10.21 11:58 |
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: Вот и я выше писал о том же - дело не в макро, а в неверном понимании того, как должна работать команда и без всякого макро:
|
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Если бы ты в messagebox() тоже использовал макро, то получил и аналогичную ошибку:
А дело-то всё в том, что в строке:
Здесь кавычки - символы-ограничители (delimiters) строкового значения, в самой строке их нет. Соответственно, и при макроподстановке они не могут возникнуть "из ниоткуда". И в этой теме мне объяснили, что отсутствие интеллекта у Фокса при выполнении макро и есть особенность макро.
Мой ответ - не стоит ждать от макро того, что не описано в Help - тогда и отсутствие таких возможностей как угадывание желаний разработчика не придётся относить к его особенностям. Я, например, не жду, написав &lcpath, что всю остальную часть приложения Фокс напишет за меня сам, а ведь это также можно считать особенностью макро. Исправлено 3 раз(а). Последнее : akvvohinc, 05.10.21 13:14 |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Макроподстановка:
lcFrom = [c:\мой файл.jpg] Copy file &lcfrom ... Проверяю Copy file c:\мой файл.jpg ... Этому же далеко до таких споров. Раньше рекомендовали вместо макро писать в скобках. Но это для избранных команд. Это не везде! |
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Александр, дело не в скобках - рекомендовали писать выражение. А в данном случае это должно быть выражение, которое не может быть "узнано" компилятором как имя файла. Именно он научен различать эти команды "по сути":
А две последние - как выражение. Причем, третий и четвертый варианты могут быть и именем файла, но компилятор "специально научили" (я так думаю) считать эти варианты выражением. В зависимости от этого и результаты компиляции этих двух вариантов будут принципиально разными. Соответственно, всё это надо бы учитывать и при написании макро, если уж им пользоваться. Исправлено 1 раз(а). Последнее : akvvohinc, 05.10.21 16:39 |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Тут в Ваших примерах нет macro. В Фоксе есть параметры команд, где надо писать переменную, а где-то значение. Для таких команд хотели написать удобное. Удобно писать COPY FILE c:\мой файл.jpg еще удобно писать lcFrom = [c:\мой файл.jpg] COPY FILE &lcFrom или COPY FILE (lcFrom) И все! Там, где надо значение COPY FILE c:\мой файл.jpg, если у нас переменная, пишем COPY FILE (lcFrom) Или макро COPY FILE &lcFrom а это будет - COPY FILE c:\мой файл.jpg Я сам писал framework. В нем тоже, есть какие-то команды. И где-то проверял, что есть файл c:\мой файл.jpg - ?File([c:\мой файл.jpg]) Если его нет, то проверял lcFrom по значению переменной ?File(lcFrom) "Дружественный интерфейс" Фокс более строг. В Фоксе не так, а может где-то и так, но я не помню. Macro - раньше считалось, что плохо, но можно. На IBM PC XT 286 в циклах по времени было плохо Сейчас не те компьютеры, чтобы об это тужить. Но если я тут сам написал что-то не так, то не удивлюсь. Можете не обращать на это внимание Исправлено 4 раз(а). Последнее : Ydin, 05.10.21 19:00 |
Re: нужно объяснение | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Ух ты, начали с начала.
Просто восторг. |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
С конца тоже начинается начало. Это все от того, кто и когда кончит |
Re: нужно объяснение | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
О волнующих проблемах можно потрепаться в курилке. Человек (новичок в фоксе) конкретно спросил о разнице двух методов и мусора навалили две страницы. Сложно зерна отделить... |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
|
Re: нужно объяснение | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: Вот ТС именно так и написал макро. Но оказалось, что так, да не так. |
© 2000-2024 Fox Club  |