如何将潜在的宏变量屏蔽为文件名URL字符串的一部分



作为程序的一部分,我编写了以下filename语句,以在迭代步骤中动态下拉股票报价。这现在运行良好,除了我在日志中收到的三条警告消息:

1) &s=未解析2) &f=未解析3) 警告:字符串长度超过252个字符,您可能有不平衡的报价

文件名加载程序url"http://finance.yahoo.com/d/quotes.csv?s=&svar1.+&svar2.+&svar3.+&svar4.+&svar5.+&svar6.+&svar7.+&svar8.+&svar9.+&svar10+&svar11.+&svar12.+&svar13.+&svar14.+&svar15.+&svar16.+&svar17.+&svar18.+&svar19.+&svar20+&svar21.+&svar22.+&svar23.+&svar24.+&svar25.+&svar26.+&svar27.+&svar28.+&svar29;svar30+&svar31.+&svar32.+&svar33.+&svar34.+&svar35.+&svar36.+&svar37.+&svar38.+&svar39.+&svar40+&svar41.+&svar42.+&svar43.+&svar44.+&svar45.+&svar46.+&svar47.+&svar48.+&svar49.+&svar50+&svar51.+&svar52.+&svar53.+&svar54.+&svar55.+&svar56.+&svar57.+&svar58.+&svar59.+&svar60+&svar61.+&svar62.+&svar63.+&svar64.+&svar65.+&svar66.+&svar67.+&svar68.+&svar69.+&svar70+&svar71.+&svar72.+&svar73.+&svar74.+&svar75.+&svar76.+&svar77.+&svar78.+&svar79.+&svar80+&svar81.+&svar82.+&svar83.+&svar84.+&svar85.+&svar86.+&svar87.+&svar88.+&svar89.+&svar90+&svar91.+&svar92.+&svar93.+&svar94.+&svar95.+&svar96.+&svar97.+&svar98.+&svar99.+&svar100+&svar101.+&svar102.+&svar103.+&svar104.+&svar105.+&svar106.+&svar107.+&svar108.+&svar109.+&svar110+&svar111.+&svar112.+&svar113.+&svar114.+&svar115.+&svar116.+&svar117.+&svar118.+&svar119.+&svar120+&svar121.+&svar122.+&svar123.+&svar124.+&svar125.+&svar126.+&svar127.+&svar128.+&svar129.+&svar130+&svar131.+&svar132.+&svar133.+&svar134.+&svar135.+&svar136.+&svar137.+&svar138.+&svar139.+&svar140+&svar141.+&svar142.+&svar143.+&svar144.+&svar145.+&svar146.+&svar147.+&svar148.+&svar149.+&svar150+&svar151.+&svar152.+&svar153.+&svar154.+&svar155.+&svar156.+&svar157.+&svar158.+&svar159.+&svar160+&svar161.+&svar162.+&svar163.+&svar164.+&svar165.+&svar166.+&svar167.+&svar168.+&svar169.+&svar170+&svar171.+&svar172.+&svar173.+&svar174.+&svar175.+&svar176.+&svar177.+&svar178.+&svar179.+&svar180+&svar181.+&svar182.+&svar183.+&svar184.+&svar185.+&svar186.+&svar187.+&svar188.+&svar189.+&svar190+&svar191.+&svar192.+&svar193.+&svar194.+&svar195.+&svar196.+&svar197.+&svar198.+&svar199.+&svar200。&f=&fvar&a.";

首先,我怎样才能掩盖&s=&f=来自处理器,但允许它仍然解析&svar宏变量?我尝试过使用%supeq和%nrbquote的各种尝试,但运气不太好。

此外,除了使用日志错误来抑制所有选项之外,还有没有其他方法可以屏蔽关于字符串长的警告?理想情况下,我不想这样做,因为我仍然希望看到任何新的错误,无论出于何种原因。

感谢

要关闭字符串过长的警告,请使用系统选项NOQUOTELENMAX。

要屏蔽一个&您可以看到,请尝试%NRSTR(),例如%NRSTR(&f)。

要"屏蔽"与号,使其不被宏处理器扫描,只需使用%STR函数。在您显示的代码中,我没有看到任何对&s变量的引用,但我确实从&f中看到了一个。将最后一个参数更改为:

%str(&)f=&&fvar&a.

此外,为了帮助调试类似的事情,我强烈建议您将整个字符串构建到它自己的宏变量(可能命名为url)中。换句话说:

%let url="http://finance.yahoo.com/d/quotes.csv?%str(&)s=//svars// %str(&)f=&&fvar&a.";
%put url=&url; 
filename loader url "&url";

我猜发生错误的代码中的s=&s=,我用//svars//替换了你的长参数字符串,只是为了保存这个答案中的格式。

在开发过程中,使用这样的"辅助宏变量"应该会有所帮助。%put只是在测试期间回显字符串,不会成为最终宏的一部分。

最新更新