|
本帖最后由 流浪铁匠 于 2018-4-20 23:58 编辑
从探索与对比char和code函数开始
对于文本函数,找到了很多有意思的发现
这篇作为总结与目录篇,在这里总结一下
1,char与code的恩怨情仇
http://club.excelhome.net/thread-1397754-1-1.html
2,看不见,不代表不存在的不可见字符
http://club.excelhome.net/thread-1397802-1-1.html
3,find与search的悲欢离合(对函数所谓忽略大小写的测试与发现)
http://club.excelhome.net/thread-1406179-1-1.html
3.5,大大小小,全角半角(大小写/全半角转化函数的探索)
http://club.excelhome.net/thread-1409172-1-1.html
4,镜像字符
http://club.excelhome.net/thread-1406184-1-1.html
5,字符的秘密,永无止境
http://club.excelhome.net/thread-1407514-1-1.html
以下为探索测试时的各种发现:
1,char与code函数不能完全一一转化,也因此造就不可见字符中最大的坑,所谓的char(63),其他还有char(0),char(32),char(128),char(255),都是转化有差异的
语言为中文时code值为63的字符有108万个(有兴趣的自己测试默认语言为英文时的情况,更多,111万+)
2,unicode编码大于65535的字符,在函数中会出现一些特殊情况:
(1) len结果为2
(2) mid的提取机理与left/right有很大差异(注意是机理,不是方向和位置),前者偏向字符编码,后者趋于字符本身mid提取单个字符时3参为1只能提取半个这种字符,提取的部分可以重组成新字符,而left与right在提取这类字符时为完全提取
(3) 接(2) 之前的测试已经证明了left/right与mid的临界舍入点不一致
left/right的2参也是之前注意到的0.99999976146501,但mid的2/3参数都是默认取整的
3,clean可以清除char(1-31),char(128)合计32个ANSI字符。
用unicode字符集看是unichar(1-31),unichar(128-159)合计63个unicode字符
trim可以清除(因函数特性,只考虑两端完全清除) char(32),char(129-254)合计127个字符
用unicode字符集看是unichar(32)和unichar(12288)合计2个unicode字符(第2个后期才注意到是空格的全角型)
这2个函数,对不可见字符的清除能力有限
char(1-255)之间的char(127)这1个字符
以及char(65280-65535)这256个code获取代码均为255而unicode对应代码均为63733的字符
clean和trim两个函数都无法清除,更不用说大量code函数结果为63的不可见字符
4,有极少数字符在单元格/编辑栏内是默认右对齐的(普通字符靠左),这些字符对字符串内的字符显示的排列顺序可能造成颠倒
且这部分字符中有2个性质很像镜像的通配符且在match等函数里具有相应通配性的性质(据群友李逸雪测试要先在excel内录入一次这类字符"激活性质")
正是因为这2个字符的特殊性质,我将这部分字符称为"镜像字符"/"手性字符"
5,unichar(173)这个字符有点奇怪,作为search 1参的时候识别了70+万个字符
但unichar(1) 更强大
6,search的忽略大小写性质范围很广,除了英文字母,希腊/罗马/拉丁/西里尔文等字母也可忽略大小写,甚至个别(组)汉字也存在这能力,不考虑上面3和4的2组特殊字符,合计找到1835组这类字符
7,有8个字符是vlookup自己找不到自己的(已用 ~ 转义测试过,不像通配符的问题)
8,countif的坑很深,
有3709个unicode字符被countif视为相同
另外除了0-9这10个标准的数字字符外
合计189个字符会被countif/四则运算/text等等函数视为数字(我用了1000+万个countif遍历所有字符找到的这189个字符)
其中包含10个全角的数字,即countif对数字的识别可忽略全半角区别
9,unichar(1466)是个奇怪的字符,
match与vlookup/searhc等函数查找时自己找不到自己,但unichar(1465)与unichar(7632)却可以识别它
10,大小写转化函数,lower/upper/proper,lower与proper(非首位字母下)对大写转小写能力相同,合计可转化665个字符
而upper可将633个字符转化为大写,而proper可将675个字符转化为大写(首位字母),两者存在差异
且其中有4个字符在使用proper转大写后可转化回小写,但有38个字符转为所谓大写后不能再使用lower继续转化
另外有26组字符,upper与lower可相互转化,但无论是否处于字符串单词首字母,proper只能把这组字符中的对应大写字母转化为小写
(该条字符繁杂,全部字符请见第3.5期的附件)
11,ASC 与 WIDECHAR 互为逆转换,一共有95组字符可以进行全半角转化且暂时未发现差异
以上11条为以上合计6篇字符系列中对各类文本函数与字符的发现与总结
函数之路漫漫,我相信没发现的东西还有很多
有待大家一起测试与探索,谢谢
|
|