aardio - 库函数搜索(旧版)

2023-11-08 17:08
文章标签 搜索 库函数 aardio 旧版

本文主要是介绍aardio - 库函数搜索(旧版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件已更新,新版链接https://blog.csdn.net/sdlgq/article/details/120179440?spm=1001.2014.3001.5501https://blog.csdn.net/sdlgq/article/details/120179440?spm=1001.2014.3001.5501此版本代码仅做参考交流!

你是不是有时候很困惑,需要实现一个功能, 只知道模糊概念或某个关键词,但不知道它具体在哪个库里实现?

要手动去遍历查看每个库,每个函数,是不是很麻烦?

这个工具,为此而生。

把代码文件放到   aardio\tools\  目录下,在aardio右方工具里面就看到了,双击即可运行。

 运行效果:

使用方法:

1、先更新数据(以后更新库后适当的更新一下数据)。3.0版用sqlite数据库代替access,开启事务,大大提高了保存速度,用我的破电脑测试,最快可达13秒。

2、输入关键词进行查找。可以查函数名称、常量名称(=左侧的部分),可以查函数描述、常量值(=右边的部分)。本程序采用IDE.doc进行数据提取分析,与官方库函数文档提取的资料完全一致。

3、资料内容分为“函数”和“常量”两种类型。“函数”包含文件名、函数所属对象、函数名、函数描述四部分。“常量”包含文件名、常量名、常量值三部分。

4、关键词可以写多个,多个关键词用分号、逗号、空格分隔。关键词以@开头表示全部内容作为一个关键词进行搜索。可以指定多个关键词是属于“与”还是“或”关系。“与”是一个函数必须同时包含所有关键词,“或”是一个函数包含多个关键词中的一个即可。

5、部分识别不准确的库文件,只需要用aardio打开,重新保存一下,再重新更新即可。此法对于官方《库函数文档》同样有效。

6、加入了内核函数库(global)支持。

//库函数搜索 3.0
import fonts.fontAwesome;
import win.ui;
import win.ui.atom;
import ide;
/*DSG{{*/
mainForm = win.form(text="aardio - 库函数关键词搜索 v3.0 光庆·程序·在线 chengxu.online";right=1056;bottom=784;bgcolor=16777215;exmode="none";mode="popup";parent=hwndStatusBar)
mainForm.add(
btnRefresh={cls="plus";text='\uF021 更新';left=686;top=735;right=805;bottom=776;bgcolor=32768;db=1;dl=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=2};
btnSearch={cls="plus";text='\uF002 搜索';left=550;top=735;right=673;bottom=776;bgcolor=-37376;db=1;dl=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=4};
checkbox={cls="checkbox";text="搜函数名、常量名";left=245;top=700;right=403;bottom=722;bgcolor=16777215;checked=1;db=1;dl=1;font=LOGFONT(h=-16);z=6};
checkbox2={cls="checkbox";text="搜函数描述、常量值";left=408;top=700;right=584;bottom=722;bgcolor=16777215;checked=1;db=1;dl=1;font=LOGFONT(h=-16);z=7};
checkbox3={cls="checkbox";text="搜函数对象名";left=590;top=700;right=715;bottom=722;bgcolor=16777215;db=1;dl=1;font=LOGFONT(h=-16);z=11};
checkbox4={cls="checkbox";text="搜文件名";left=717;top=700;right=815;bottom=722;bgcolor=16777215;db=1;dl=1;font=LOGFONT(h=-16);z=12};
checkbox5={cls="checkbox";text="查函数";left=10;top=700;right=90;bottom=722;bgcolor=16777215;checked=1;color=255;db=1;dl=1;font=LOGFONT(h=-16);z=13};
checkbox6={cls="checkbox";text="查常量";left=89;top=700;right=169;bottom=722;bgcolor=16777215;checked=1;color=8388736;db=1;dl=1;font=LOGFONT(h=-16);z=14};
edit={cls="richedit";left=9;top=8;right=1048;bottom=669;bgcolor=0;color=15793151;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16);multiline=1;readonly=1;vscroll=1;z=3};
editWord={cls="edit";left=9;top=742;right=484;bottom=772;autohscroll=false;autovscroll=false;clipch=1;db=1;dl=1;edge=1;font=LOGFONT(h=-16);tabstop=1;z=1};
plus2={cls="plus";left=814;top=736;right=1053;bottom=771;db=1;dl=1;foreRepeat="stretch";notify=1;z=8};
radiobutton={cls="radiobutton";text="与";left=490;top=736;right=537;bottom=757;bgcolor=16777215;checked=1;db=1;dl=1;font=LOGFONT(h=-16);z=9};
radiobutton2={cls="radiobutton";text="或";left=490;top=756;right=537;bottom=777;bgcolor=16777215;db=1;dl=1;font=LOGFONT(h=-16);z=10};
static={cls="static";left=10;top=673;right=452;bottom=698;db=1;dl=1;font=LOGFONT(h=-16);transparent=1;z=5}
)
/*}}*/var skin = {background={active=0xFFA6B7FE;default=0xFF006EFF;hover=0x9E006EFF}
}mainForm.btnSearch.skin(skin)
mainForm.btnRefresh.skin(skin)import process.mutex;
var mutex = process.mutex("godking-libfuncs-search")
if( mutex.conflict ){ win.msgbox("已经运行")
return;}mainForm.show() 
mainForm.edit.wrap=true
mainForm.editWord.setCueBannerText("多个关键词用分号、逗号、空格分隔。以@开头视为一个关键词。")//定义函数分析线程
var getfuncs = function(fullpath){if !#fullpath return ; if thread.get("stop") return; // 停止//创建共享表import thread.tablevar funcs = thread.table("funcs")//分析数据import ide.docvar f = ide.doc(fullpath)//添加函数var sections = table.keys(f.sections)for(i=1;#sections;1){var keys = ..table.keys(f["sections"][sections[i]])for(j=1;#keys;1){if thread.get("stop") return;funcs.push({fullpath=fullpath,type="section",section=sections[i],key=keys[j],value=f["sections"][sections[i]][keys[j]]})}}	//添加常量var keys = ..table.keys(f["define"])for(j=1;#keys;1){if thread.get("stop") return;funcs.push({fullpath=fullpath,type="define",section="",key=keys[j],value=f["define"][keys[j]]})}
}//定义函数保存线程
var savefuncs = function(){import sqliteimport thread.tablevar db = sqlite("/funcs.db")var funcs = thread.table("funcs")var savecount = 0;db.beginTrans()var cmd = db.prepare("INSERT INTO funcs([fullpath],[type],[section],[key],[value]) VALUES(@fullpath,@type,@section,@key,@value)")while !thread.get("stop") {var func = 	funcs.pop()if func{cmd.step(fullpath=func["fullpath"],type=func["type"],section=func["section"],key=func["key"],value=func["value"])savecount++;thread.set("savecount",savecount)thread.set("restcount",funcs.count())}}cmd.finalize();db.commitTrans()db.close()
}mainForm.btnRefresh.oncommand = function( id,event ){//判断更新还是停止if mainForm.btnRefresh.text='\uF021 更新'{if ..win.msgbox("确定要更新吗?","提示",1/*_MB_OKCANCEL*/,mainForm.hwnd)!=1{return ; }thread.set("stop", false)mainForm.btnRefresh.text='\uF021 停止'}else{thread.set("stop", true)mainForm.btnRefresh.text='\uF021 更新'return ; }//防止数据库错误,先删除再重建io.remove("/funcs.db")if io.exist("/funcs.db") ..win.msgbox("删除原数据库失败")//创建数据库import sqlitevar db = sqlite("/funcs.db")db.exec("CREATE TABLE [funcs]([fullpath],[type],[section],[key],[value]);")if !db.existsTable("funcs") {	..win.msgbox("创建表失败!")	}db.close()//搜索库文件import fsysvar files = {"global"}fsys.enum("~/lib/", "*.aardio",function(dir,filename,fullpath,findData){ if(filename){ ..table.push(files,fullpath)}} ,);		//初始化函数共享表、线程变量import thread.tablethread.table("funcs").clear()thread.set("savecount",0)thread.set("restcount",0)//启动函数保存线程待命(监控函数共享表)thread.create(savefuncs)//创建线程管理器import thread.managevar ts =  thread.manage()//启动线程管理器任务,进行函数分析,加入函数共享表var count = 0var tick = time.tick()for(i=1;#files;1){ts.createLite(getfuncs,files[i])count++;mainForm.edit.text = "正在分析:" ++ ..math.round(count*100/#files,1) ++ "% >> " ++ ..math.floor((time.tick()-tick)/1000) ++ "s >>" ++ files[i]mainForm.static.text = "已保存数量:" ++ thread.get("savecount") ++ "  剩余数量:" ++ thread.get("restcount")while(thread.get("restcount")>3000){	//防止数据太多导致保存速度变慢win.delay(100)}if thread.get("stop") {ts.quitMessage()return false; }}mainForm.edit.text = "已分析完毕,正在等待保存中…………"//检测函数共享表中剩余函数数量ts.waitClose()while(thread.get("restcount")>0){mainForm.static.text = "保存数量:" ++ thread.get("savecount") ++ "    剩余数量:" ++ thread.get("restcount")win.delay(100)}mainForm.static.text = "保存数量:" ++ thread.get("savecount") ++ "    剩余数量:" ++ thread.get("restcount")//结束搜索thread.set("stop", true)mainForm.btnRefresh.text='\uF021 更新'mainForm.edit.text = "更新完毕,共" ++ #files++"个文件," ++ thread.get("savecount") ++ "个函数常量,耗时:" ++ ..math.floor((time.tick()-tick)/1000) ++ "秒!"
}mainForm.btnSearch.oncommand = function(id,event){//关键信息提示mainForm.edit.text=""if !#mainForm.editWord.text {mainForm.edit.text = "请填写函数关键词!"return ; }if !(mainForm.checkbox.checked:mainForm.checkbox2.checked:mainForm.checkbox3.checked:mainForm.checkbox4.checked) {mainForm.edit.text = "请先选择搜索项!"return ; }if !(mainForm.checkbox5.checked:mainForm.checkbox6.checked) {mainForm.edit.text = "请先选择搜索范围!"return ; }//处理关键词var t = mainForm.editWord.textif t[[1]]="@" {t = {..string.right(t,-2)}}else{t = ..string.replace(t,"@;",";")t = ..string.replace(t,"@,",";")t = ..string.replace(t,"@,",";")t = ..string.replace(t,"@ ",";")t =	..string.split(t,";")}//根据关键词,定义查询条件模板var Tsql = " ("for(i=1;#t;1){Tsql += " [Tsql] like '%" + t[i] + "%'"if i<#t{if mainForm.radiobutton.checked {Tsql += " and"}else {Tsql += " or"}}}Tsql += ")"//根据模板,定义四个查询类型语句var fsql = ..string.replace(Tsql,"@[Tsql]","[key]")var csql = ..string.replace(Tsql,"@[Tsql]","[value]")var osql = ..string.replace(Tsql,"@[Tsql]","[section]")var psql = ..string.replace(Tsql,"@[Tsql]","[fullpath]")//定义最终查询语句var sql = "SELECT * FROM [funcs] where"if !mainForm.checkbox5.checked {	sql += " [type]='define' and"	}if !mainForm.checkbox6.checked {	sql += " [type]='section' and"	}sql += "(1<>1"if mainForm.checkbox.checked {		sql += " or" + fsql	}if mainForm.checkbox2.checked {		sql += " or" + csql	}if mainForm.checkbox3.checked {		sql += " or" + osql	}if mainForm.checkbox4.checked {		sql += " or" + psql	}sql += ")"//开始查询import sqlitevar db = sqlite("/funcs.db")var data = db.getTable(sql)db.close()//显示数据var t = ""for(i=1;#data>100?100:#data;1){if data[i]["type"]="define"{t += i + "  " + data[i]["key"] +" = " + data[i]["value"] + '\r\n\r\n';} else {t += i++":  " +data[i]["key"] + '\r\n't += data[i]["fullpath"]+ '\r\n't += data[i]["value"] + '\r\n\r\n'}}if #t{mainForm.edit.text = t + "查询完毕!"if #data>100 mainForm.edit.log('\n\n查询结果:' ++ #data ++ '条,数据太多,参考意义不大,只显示前100条。\n为更好的实现搜索效果,建议您使用多关键词,提高查询精确度。')} else { mainForm.edit.text = "查无记录!" }
}mainForm.onClose = function(hwnd,message,wParam,lParam){thread.set("stop", true)win.quitMessage()
}import inet.http
mainForm.plus2.foreground = "http://chengxu.online/images/banner.gif"mainForm.plus2.oncommand = function(id,event){import processprocess.explore("http://chengxu.online")
}mainForm.editWord.onOk = function(){ mainForm.btnSearch.oncommand()return true; 	
} win.loopMessage();

这篇关于aardio - 库函数搜索(旧版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/371275

相关文章

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

记忆化搜索【下】

375. 猜数字大小II 题目分析 题目链接:375. 猜数字大小 II - 力扣(LeetCode) 题目比较长,大致意思就是给一个数,比如说10,定的数字是7,让我们在[1, 10]这个区间猜。 如果猜大或猜小都会说明是大了还是小了,此外,我们还需要支付猜错数字对应的现金。 现在就是让我们定制一个猜测策略,确保准备最少的钱能猜对 如果采用二分查找,只能确保最小次数,题目要求的

2014暑假集训搜索专题

A - 漫步校园 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划