读取txt或者字符串中的aar函数代码,并通过loadcode() 来加载执行此函数

By admin at 2018-08-26 • 0人收藏 • 303人看过

如题,有个需求是能过加载并执行一个txt或者ini文件中的字符串,这个字符串中包含需要被调用的函数方法,程序里要执行此方法。

import console; 

var sss=/******
xieyi = function(str){
	var dataStr = string.left(string.replace(str,"\s",""),4);
	var ret = (10-tonumber(dataStr)*0.01);	
	return ret; 
}

******/


var xx = loadcode(sss)

console.varDump(xx())


console.varDump(xieyi("50 01"))

console.pause(true);

说一说注意关键点:

1,可以在字符串里添加

    var str1,str2 = ...

    来动态的获取外部提供的输入数据,但是这个数据需要在xx(str1,str2)的时候写

2,函数只需要执行一次xx()初始化,之后就可以无限制的使用xieyi()函数了。


blob.png

3 个回复 | 最后更新于 2018-08-26
2018-08-26   #1

更进一步:

如果字符串中是一个多维度Tab表,而且表里有字符串和函数,那么

import console; 

var sss=/******
xxtab={
	geshi = "41";
	xieyi = function(str){
		var dataStr = string.left(string.replace(str,"\s",""),4);
		var ret = (10-tonumber(dataStr)*0.01);	
		return ret; 
	}

}



******/


var xx = loadcode(sss)

console.varDump(xx())

console.varDump(xxtab.geshi)
console.varDump(xxtab.xieyi("50 01"))


console.pause(true);

blob.png

2018-08-26   #2
import console; 

var sss=/******
xxtab={
    	{
		geshi = "41";
		xieyi = function(str){
			var dataStr = string.left(string.replace(str,"\s",""),4);
			var ret = (10-tonumber(dataStr)*0.01);	
			return ret; 
			}
		};
		{
		geshi = "a3 50 01";
		xieyi = function(str){
			var dataStr = string.left(string.replace(str,"\s",""),4);
			var ret = (tonumber(dataStr,16)*0.01 -100);	
			return ret; 
			}
		}
}



******/


var xx = loadcode(sss)

console.varDump(xx())

console.varDump(xxtab[1].geshi)
console.varDump(xxtab[1].xieyi("50 01"))

console.varDump(xxtab[2].geshi)
console.varDump(xxtab[2].xieyi("50 01"))

console.pause(true);

blob.png

2018-08-26   #3

如果把loadcode()改为loadcodex(),那么就可以少写一个执行初始化的语句了

import console; 

var sss=/******
xxtab={
    	{
		geshi = "41";
		xieyi = function(str){
			var dataStr = string.left(string.replace(str,"\s",""),4);
			var ret = (10-tonumber(dataStr)*0.01);	
			return ret; 
			}
		};
		{
		geshi = "a3 50 01";
		xieyi = function(str){
			var dataStr = string.left(string.replace(str,"\s",""),4);
			var ret = (tonumber(dataStr,16)*0.01 -100);	
			return ret; 
			}
		}
}



******/

//改为loadcodex之后,就会立即初始化一次这个函数,就不用手动xx()了
var xx = loadcodex(sss)
//console.varDump(xx())

console.varDump(xxtab[1].geshi)
console.varDump(xxtab[1].xieyi("50 01"))

console.varDump(xxtab[2].geshi)
console.varDump(xxtab[2].xieyi("50 01"))

console.pause(true);


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...