我想查找变量是否存在于字符串中(& fixed),如果存在,则查找哪个字数。
/* Papervision3D engine setup code here */
//...
var scene:Scene3D = new Scene3D();
//...
var file:FileReference;
function LoadProyect(e:MouseEvent):void
{
var fd:String = "3Dp Files (*.3dp)";
var fe:String = "*.3dp";
var ff:FileFilter = new FileFilter(fd,fe);
file = new FileReference();
file.browse(new Array(ff));
file.addEventListener(Event.SELECT, onFileSelect);
file.addEventListener(Event.COMPLETE, fileComplete);
}
function onFileSelect(e:Event):void
{
file.load();
}
function fileComplete(e:Event):void
{
var aScene:ByteArray = e.target.data;
var objScene:Object = aScene.readObject();
scene = objScene as Scene3D;
}
我想创建一个名为regioxc的宏变量,它可以等于任何一个region1,下一次运行宏时它可能等于regiodc或其他东西(总是带有开始字符串&#39) ; regio'),如果这是& fixed字符串中指定的区域变量。这仅在首先在& fixed字符串中指定了regio变量时有效,但在这种情况下它是第二个变量,因此这不起作用。我找不到一种从& fixed字符串创建变量(字)计数值的强大方法,以便能够使用扫描功能。在这种情况下,我知道它应该是2。这里的任何帮助都会非常值得赞赏。
答案 0 :(得分:0)
使用数据步骤功能更容易看到这一点。您要做的是使用index
结果通知substring
,然后在该子字符串上使用scan
。这样,它总是 第一个单词。 scan
查找哪个单词#,记住,不是哪个位置。如果你find
整整一个字,你可以使用findw
或indexw
,但由于你只找到一个单词的一部分,但希望返回整个单词,你可以&真的那么做。
data want;
fixed="variable1 region1 variable3";
if index(fixed,"regio") then do;
regioxc = scan(substr(fixed,index(fixed,"regio")),1);
end;
put _all_;
run;
在宏变量中,你仍然可以这样做:
%LET fixed = %STR(variable1 region1 variable3);
%LET regioxc = %SCAN(%substr(&fixed,%index(&fixed,regio)),1);
%put &=regioxc;
(我省略%if
以便更容易看到它的工作,当然在生产代码中将其重新投入使用。)