在CAD设计中,有几个类型的问题是大家遇到得比较多的,绘图类、打印类以及今天要说的字体类。
那么大家一般会在什么时候遇到字体的问题呢?
当打开外部图纸时经常会提示找不到相应的字体而弹出替换字体的窗口,低版本CAD会要求替换,而高版本则会提供多一个忽略的选择。
于是,这个时候大家往往就懵了,大字体文件?常规字体文件?形文件?什么跟什么?
在这里一一往下剖析。
首先,CAD可使用的字体文件主要分为两类
一类是CAD自定义的*.shx字体;
一类是操作系统中的*.ttf字体,如宋体、黑体等。
两类字体都可以自行添加
SHX字体可以直接复制到CAD安装目录下的fonts目录下。
通过安装字库或将*.ttf文件复制到windows的fonts目录下可以添加TTF字体。
TTF字体通常可以单独使用,下拉框选用即可。
而SHX文件则是形文件,通常分为两种,字形和符号形。
字形又分两种,大字形和小字形,其中大字形定义的是双字节的亚洲文字,如简体中文(hztxt.shx、tssdchn.shx、gbcbig.shx)、日文韩文等。
小字形一般为西方文字,包括字母、符号(txt.shx、simplex.shx)等,也称为常规字体文件。
符号形,顾名思义就是用于插入特殊符号、图形或定义线型中的图形,如ltypeshp.shx,aaa.shx,gdt.shx等。
1、形符号是可以直接插入到图中的,我们首先要用load命令载入形文件(*.shx),将字体中符号读出来,然后用shape命令插入符号,插入时指定相应符号名称,便可以将一个符号形(SHAPE)实体插入当前图中。
2、用于定义线型,很多复杂的线型都是利用符号形定义的,线型定义时将符号形(常见的如ltypeshp.shx)。
虽然都是SHX文件,但是不同类型的字体不能随意替换,即便是同类型的字体文件也不能随意替换,即便是同名的字体文件有时候也不完全相同。
例如设计院使用较多的txt.shx和hztxt.shx有的带有钢筋符号,有的就不带。因此建议在进行图纸交流的时候,最好附上使用的字体文件。
LEFT、RIGHT、MID这三个可以理解为按字数提取内容,LEFTB、RIGHTB、MIDB这三个可以理解为是按字节提取内容。他们参数都是一样的,就是字数和字节的区别。
▼ 一、那什么叫字节,单字节、双字节。
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位。
在半角输入状态(ASCII码),一个英文字母(不分大小写)占1个字节的空间,一个数字占1个字节,一个英文状态的标点符号占1个字节,叫单字节字符;一个中文占2个字节,一个中文标点符号占2个字节,叫双字节字符。
国内、国外绝大部分的系统软件代码都是用半角字符完成的,也就是ASCII码。所以我们在用输入法时一定要默认“半角”状态。
举例说明:图1就是用文本函数LEN和LENB来分别计算字数和单、双字节,更能清楚了解到字节和字数的概念
图1:字节和字数的区别
▼ 二、了解完单双字节,现在来了解6个提取文本内容的函数。
他们分别是:LEFT、RIGHT、MID按字数提取内容;LEFTB、RIGHTB、MIDB按字节数提取内容。
① LEFT函数是“从左边开始按要求的字个数来提取内容”,公式模板:LEFT(文本或单元格,提取几个字) 。如 :=LEFT("我爱中国",2) 返回的结果是“我爱”这两个字。
② RIGHT函数是“从右边开始按要求的字个数来提取内容”,公式模板:RIGHT(文本或单元格,提取几个字) 。如 :=RIGHT("我爱中国",2) 返回的结果是“中国”这两个字。
③ MID函数是“从要求的指定位置开始,按要求的字个数来提取内容”,公式模板:MID(文本或单元格,从第几个字开始,提取几个字) 。如 :=MID("我爱美好的生活",3,4) 返回的结果是“美好的生”这四个字。
④ LEFTB函数是“从左边开始按要求的字节数来提取内容”,公式模板:LEFTB(文本或单元格,提取几个字节) 。
如1 :=LEFTB("我爱中国",5) 返回的结果是“我爱 ”这两个字加一个空格 。因为一个中文是2个字节,5个字节表示2.5个中文,因为没有半个中文字,所以用一个空格代替,最终返回就是“我爱 ”。
如2 :=LEFTB("我爱1314你",5)返回结果“我爱1”,因为5个字节表示2个中文加1个数字。
⑤ RIGHTB函数是“从右边开始按要求的字节数来提取内容”,公式模板:RIGHTB(文本或单元格,提取几个字节) 。如 :=RIGHTB("我爱 中国",5) 返回的结果是“ 中国 ”,这一个空格加2个中文 。因为空格也算一个字节,一个中文是2个字节。
⑥ MIDB函数是“从要求的字节位置开始,按要求的字节数来提取内容”,公式模板:MIDB(文本或单元格,从第几个字节开始,提取几个字节) 。如 :=MIDB("我爱美好的?生活",6,8) 返回的结果是“ 好的?生”,这一个空格+两个中文+英文符号?+一个中文。
解析下⑥原因:“我爱美”是6个字节,从第6个字节开始意味着“美”这个字不完整,因为“美”的位置是第5字节和第6字节两个字节位置组合的。字不完整只能用空格代替,代表1个字节。英文符号?也是1个字节,所以8字节刚好是(一个空格+两个中文+英文符号?+一个中文)。
▼ 三、6个提取内容函数一定要配合查找函数FIND、SEARCH和FINDB、SEARCHB使用才灵活。
FIND、SEARCH返回的是“查找的字”所在的字个数 位置,FINDB、SEARCHB返回的是“查找的字”所在的字节数 位置,
① 公式模板:=FIND(要查找的内容或单元格,被查的内容或单元格,从第几个字数开始查);
② 公式模板:=SEARCH(要查找的内容或单元格,被查的内容或单元格,从第几个字数开始查);
③ 公式模板:=FINDB(要查找的内容或单元格,被查的内容或单元格,从第几个字节数开始查);
④ 公式模板:=SEARCHB(要查找的内容或单元格,被查的内容或单元格,从第几个字节数开始查);
注意:“要查找的内容”字数一定不能超过“被查的内容”字数,“要查找的内容”一定是在“被查的内容”里的,不然结果是错误值。
如图2:
图2:查找函数返回的字数位置和字节数位置
▼ 四、查找函数FIND和SEARCH参数都一样,返回的结果也一样,那这两个函数有什么区别呢?
① 函数 FIND与 FINDB是区分大小写 并且不允许使用通配符 。
如1 :=FIND("a","AAaaA",1)返回结果是3,因为在FIND和FINDB函数眼里:大写的A和小写的a是不一样的,第3参数"1"表示从第1个数开始查找a,返回的结果是第一个a的位置,第一个a是在第3个字数位置。
如2 :=FIND("a","AAaaA",4)返回结果是4,第3参数"4"表示从第4个数开始往后面查a,第4个数刚好是小写的a,所以结果返回是4。
如3: =FIND(" ","我爱 你",1)返回的结果是3,因为"我爱"后面有一个"空格",第1参数双引号里也有"空格",返回结果是3;如果第1参数双引号里没有"空格",则返回的结果是第3参数的数字。
FINDB也是同理,从第1字节或者第4字节开始查找。
② 函数 SEARCH与 SEARCHB是不区分大小写 并且允许使用通配符 。
什么是通配符?通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索内容。
一个星号(*)可以表示一个或无数个字符;不确定具体有没有内容也可以加星号(*)。如NOTE这个单词,你可以通过*note查找到,也可以通过*te查找。
一个问号(?)仅代表一个字符,而且这个字符必须存在。如NOTE这个单词,你可以通过no?e或者no??来找到,但是note?是找不到的,因为note后面没有内容了;换成note*是没问题的,因为*代表内容可有可无。
总结下FIND和SEARCH区别:就是FIND区分大小写,SEARCH能用通配符,互补关系。FINDB和SEARCHB同理。
▼ 五、案例讲解
① 案例一、如图3:因为地址不是太规律,第3行有两个“市”字,第4行没有省份,如果想一条公式直接完成,要嵌套很多函数,容易出错,这里用添加辅助列的方法,快速拆分提取内容。
图3:拆分地址内容
1 在B2单元格输入公式:=IFERROR(LEFT(A2,FIND("省",A2,1)),"")。因为第四行没有省份,不在外面嵌套IFERROR函数会出现错误值,IFERROR就是可以把错误值变成我们想要的任何值,这里变成空值“”。详见图4:图4:提取省份
2 提取市的内容,这时用到辅助列1。在辅助列F2单元格输入=RIGHT(A2,LEN(A2)-LEN(B2)),再在市列C2单元格输入=LEFT(F2,FIND("市",F2,1))。详见图5:图5:提取市内容
3 提取区县市的内容,这时用到辅助列2。在辅助列G2单元格输入=RIGHT(F2,LEN(F2)-LEN(C2)),再在区县市列D2单元格输入=LEFT(G2,SUM(IFERROR(FIND({"县","区","市"},G2,1),0))),因为是数组模式,一定要按CTRL+SHIFT+回车三键,不然会出错。 详见图6:图6:提取区县市
4 提取街道的内容,在E2单元格输入公式=RIGHT(G2,LEN(G2)-LEN(D2)),直接提取街道内容,详见图7:图7:提取街道内容
我们通过添加辅助列的方法,就避开了MID这个函数,用更简单的方法提取出了更复杂且不是太规律的地址内容。
② 案例二、提取数字开始往后的内容。在B2单元格输入公式=RIGHTB(A2,LENB(A2)-(SEARCHB("?",A2,1)-1)),利用中文是双字节,数字是单字节来求出数字的位置。详见图8:
图8:求出数字往后的内容
喜欢的朋友帮忙点个关注、转发、点赞、收藏,谢谢!
相关问答
就是长度是两个字节(byte)的字符,比如“嗨”、“!”、“。”,汉字及中文标点就是双字节字符;“k”、“!”、“.”,英文字母及英文标点是单字节的。这是计...
中文字符都是双字节1、单字节指只占一个字,是英文字符。双字是占两个字节的,中文字符都占两个字节计算机中的数据都是以0和1来表示的,其中一个0或者一个1称之...
应该是说的GBK编码用双字节表示。GBK文字编码用双字节来表示,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字...
[最佳回答]ASCII码是一个字节代表一个字符或者控制字,查表可以知道31H:141H:A汉字国标代码用两字节代表一个汉字,查表可以知道3141(十进制)为汉字“可”ASCI...
16位,一个字节占八位,两个字节占十六位16位,一个字节占八位,两个字节占十六位
ASCII码用一个字节来表示一个字符,汉字编码用两个连续的字节来表示一个汉字。汉字编码(Chinesecharacterencoding)是为汉字设计的一种便于输入计算机的代...
字节与字的大小是没有有关系。打的字体大小不会造成字节的变化。一个字就是两个字节。首先我们先来看几个相关概念:位:计算机能处理的最小单元,它不随CPU的...
除了英文全是多字节文字。
[回答]汉语大多数词,都是单音节的.比如天,地,人.风,火.但也有一些名词,是双音节的.单独出现,无意义.蜈蚣,蜻蜓,貔貅.都是名词,单独出现,蜈,蜻,毫无意义...
一个汉字是两个字节。可能有人会想为什么1个字母是1个字节,而1个汉字需要2个字节。主要可以是说我们中文汉字比字母多很多,使用字母那套编码无法兼容完我们的...