大数跨境
0
0

VB/VBA如何高效反转字符串中的大小写?

VB/VBA如何高效反转字符串中的大小写? BtOfficer
2025-06-23
0
导读:VB/VBA提供了诸多大小写功能,但唯独没提供翻转大小写,这是为何呢?因为使用场景太稀薄。但翻转大小写,对于字符而言,并不会丢失信息,但数据却变了(当然是针对英文字符),因此在编码领域,比如加解密,还

前言

翻了下,确实没有

VB/VBA提供了诸多大小写功能,但唯独没提供翻转大小写,这是为何呢?因为使用场景太稀薄。但翻转大小写,对于字符而言,并不会丢失信息,但数据却变了(当然是针对英文字符),因此在编码领域,比如加解密,还是很有用处的。

既然VB/VBA没有提供现成货,那就只有自己实现了。这时候,Mid,Chr和连字符(&)组合拳就是必不可少的了。

一、现有组合拳实现

和网上或AI写的,还是有明显的质量优势

一般情况下,也就这么个思路,功能上绝对没问题。但是,前面《VB/VBA的连字符&明明是最快的,却背了最慢的锅!》中给大家讲了,虽然连字符&拼接字符串很快,但是“=”暗含的数据深拷贝,将这一优势给完全遮盖了。

更何况《VB/VBA中,Asc虽好但并非没有代价,最终还得另寻他法!》中也测试了Mid这类字符串函数,一样存在"="的问题。功能上尽管可以实现,但性能却差强人意,难堪写算法用的“砖石”大任。这一点,在后面的性能比较时,可以体现得非常明显。当然,就低频用用,就无所谓了。

二、用扩展运行时中的“材料”来实现

在《内置VB/VBA字符指针函数,让字符处理快到飞起!》中,给大家介绍了字符指针函数,StrByte和StrInt。它不像Mid函数,只能读,不能写。所以,就避免了字符串数据的叠罗汉,从而大幅提高性能。

扩展运行时,可以自举

扩展运行时中,有上千例类似StrInt这样的高效函数,用户完全可以用它们构建高性能VB/VBA专用COM库,当然也可以给其他语言,比如vbs,JScript,JSA,Python等提供高性能库。

下面来比较二者实现的效率:

传统方法慢不慢,得看比较

比较下,扩展运行时的性能效果就出来了

从测试来看,扩展运行时的实现性能几乎是传统方法的10倍了。因此使用扩展运行时来构建VB/VBA代码,性能提速几倍则是轻轻松松。

VB/VBA本身提供的功能,性能也并不差,很多都是接近C/C++的70%-90%左右。而扩展运行时,是GASM对象(详见《VB/VBA扩展运行时的进展介绍》)用汇编自举,在接入大模型AI提供的优化方案后,很多都比肩甚至超越了非精通C/C++人士用C/C++实现的库。

因而,扩展运行时,完全可以胜任VB/VBA写算法实现程序。并用于实现小而精悍的各类应用,在AI加持下(后续文章会介绍),有广阔的应用前景。这在其他动辄上x个G环境大小的今天,VBA的开箱即用和VB6的小巧,着实算是一股清流了。

三、用户可直接用GASM对象扩展性能更强悍的功能

用扩展运行时的GASM对象直接用汇编实现上述功能,并给予CaseRev标签,类似于函数名(持久化为二进制代码后就会变成全局函数名),因具体内容涉及汇编,就不细说了,直接看测试过程和结果:

看,性能还能翻,是传统方法的20倍以上

这个性能够恐怖了吧,这还是在i5第1代低电压CPU上的表现(本本已经快10年工龄了)。所以说,对于一个Native语言,不要轻浮地说它这也不行那也不行,否则终归是自己不行!VB/VBA有GASM的加持,就已经跟语言无关了,再配合GTLB对象(可接管内存中的类型系统),那感觉真是妙啊!


【声明】内容源于网络
0
0
BtOfficer
MyPlace安全生产框架,行业情报,办公自动化
内容 197
粉丝 0
BtOfficer MyPlace安全生产框架,行业情报,办公自动化
总阅读29
粉丝0
内容197