搜档网
当前位置:搜档网 › 实现SQL提取出字符串中的汉字、字母或是数字的函数

实现SQL提取出字符串中的汉字、字母或是数字的函数

实现SQL提取出字符串中的汉字、字母或是数字的函数
实现SQL提取出字符串中的汉字、字母或是数字的函数

实现SQL提取出字符串中的汉字、字母或是数字的函数

--创建函数(得到字符串中的汉字)

CREATE FUNCTION[dbo].[GetChinese]

(

@string NVARCHAR(MAX)

)

RETURNS VARCHAR(200)

AS

BEGIN

WHILE PATINDEX('%[^吖-咗]%',@string)> 0

BEGIN

SET@string=STUFF(@string,PATINDEX('%[^吖-咗]%',@string),1,N'');

END

RETURN@string;

END

GO

--创建函数(得到字符串中的字母)

CREATE FUNCTION[dbo].[GetLetter]

(

@string NVARCHAR(MAX)

)

RETURNS VARCHAR(MAX)

AS

BEGIN

WHILE PATINDEX('%[^a-z]%',@string)> 0

BEGIN

SET@string=STUFF(@string,PATINDEX('%[^a-z]%',@string), 1,'');

END

RETURN@string;

END

GO

--创建函数(得到字符串中的数字)

CREATE FUNCTION[dbo].[GetNumber]

(

@string NVARCHAR(200)

)

RETURNS VARCHAR(200)

AS

BEGIN

DECLARE@values VARCHAR(200)

DECLARE@value1INT

DECLARE@value2INT

SELECT@value1=PATINDEX('%[0-9.]%',@string)

SELECT@value2=PATINDEX('%[^0-9.]%',SUBSTRING(@string,

PATINDEX('%[0-9.]%',@string),len(@string)-PATINDEX('%[0-9.]%',@string) + 1))

IF@value2=0

BEGIN

SELECT@values=SUBSTRING(@string,@value1,len(@string)+1 -@value1) END

ELSE BEGIN

SELECT@values=SUBSTRING(@string,@value1,@value2- 1)

END

RETURN CASE@values WHEN''THEN'0'ELSE@values END;

END

GO

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

e x c e l中个单元格中有文字字母字符和数字如何能把数字单独提取出 来提取数字 集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来2011-04-13 11:25匿名|分类:|浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志: 想在B中表示为 最好能教一个方法十分感谢 我有更好的答案 按默认排序| 2条回答 |2011-04-13 11:32|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

excel中取出字符串中的数字

excel中取出字符串中的数字 1.数据- "a12345y" 如何自动撷取其中的数字 2.数据- "12345" 如何自动只撷取其中间三个的数位(即234)放於其它格上 如果你的数据有固定的长度和格式,公式可以简单些,如,前后各有1位字母: A1="a12345y" B1=Mid(A1,2,5) 如果前后字母个数不固定: B1=MID(A1,MA TCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(IN DIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 数组公式,按Ctrl+Shift+Enter三键结束。 1、截取字符串中的一部分,用函数MID()。 A1="a12345y" 公式最外层是Mid()函数,该函数的格式是: Mid(文本,开始位置,长度) 对应公式是: MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIR ECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 2、长度=末位置-首位置+1。 其中MATCH()公式有不同的两个: 文本A1中第1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),) 文本A1中最后1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)) 两个公式不同之处,在于最后一个逗号。公式什么意思先别管,你只要知道: 长度=最后1个数字的位置-第1个数字的位置+1 本例中:6-2+1=5,数字长度为5。 3、拆散字符串。 下面公式取出字符串中的每一粒字符: MID(A1,1,1)="a" MID(A1,2,1)="1" …… MID(A1,6,1)="5" MID(A1,7,1)="y" 下面公式返回的是拆散后的一串字符(数组): MID(A1,{1;2;3;4;5;6;7},1)={"a";"1";"2";"3";"4";"5";"y"} 其中{1;2;3;4;5;6;7}用ROW(INDIRECT("1:"&LEN(A1)))计算所得。 这是数组公式中的一个基本技巧,如果还不懂,请从固顶的帖子中找到并学习它。 在编辑栏中,请用鼠标选取MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) 然后按F9可以看到上面的结果。 4、0乘以任何数都得0吗? 你一定不会怀疑。 还是在编辑栏,请继续用鼠标选择: 0*{"a";"1";"2";"3";"4";"5";"y"},或者选择: 0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),按F9,结果显示为: {#VALUE!;0;0;0;0;0;#VALUE!}。真的不是“都得0”。 里面除了0,还有错误值。个数与原来数组元素的个数相同。

提取excel中的一段数字、文字、符号方法

一、单元格A1中有如下内容:要提取出数字 经测试下列公式好用 提取Excel单元格中连续的数字的函数公式是: =LOOKUP(9E+307,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890)),ROW($1:$8))) 或者 =LOOKUP(9E+307,--MID(H2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},H2&1234567890)),ROW(INDIRECT("1:"&LEN(H2))))) 解释一下这个公式 FIND函数——查询文本所在位置 FIND(find_text,within_text,[start_num]) FIND(需查找的文本,包含查找文本的单元格,开始查找单元格的字符位置(可选)) 此处FIND函数是搜索{1,2,3,4,5,6,7,8,9,0}数字在“A1&1234567890”中所在的位置; A1&1234567890的目的是在用FIND函数查询时,不出现错误值,使之后的MIN函数可以正常运行。 即FIND({1,2,3,4,5,6,7,8,9,0},“小王联系电话58670098负责财务1234567890”) 选取划黑后按F9,得出的位置为:{19,20,21,22,7,9,10,8,13,11} MIN函数——返回列表中的最小值 MIN(number1,number2,……) MIN(数字1,数字2,……)

将FIND所得结果{19,20,21,22,7,9,10,8,13,11}带入MIN函数,最小值所得为7,正是第一个数值出现的位置; 也正是之前FIND函数中使用A1&1234567890的原因。 MID函数——返回文本字符串从指定位置开始特定数目的字符,即提取某段字符。 MID(text,start_num,num_chars) MID(被提取的文本或单元格,开始提取的字符位置,提取的字符个数) 将上述MIN函数所得带入MID(A1,7,ROW($1:$8); ROW($1:$8)使用row函数不是用来计算行,而是借用其作为常量。当然1:8是可以修改的,只要大于数值个数就不影响结果。 --MID(……)中“--”的作用是将MID得出的结果变为数值,使其可以被LOOKUP函数查询到。 MID(……)选取划黑后按F9{"5";"58";"586";"5867";"58670";"586700";"5867009";"58670098"} --MID(……)选取划黑后按F9{5;58;586;5867;58670;586700;5867009;58670098} LOOKUP函数——从返回某个查询的值(数组形式) LOOKUP(lookup_value,array) LOOKUP(在数组中查找的值,数组范围区域)

如何在EXCEL单元格里提取字符并求和

在A1单元格里数组为1+10-20在B1单元格里数组为-2+55-122 ;请问如何把 A1和B1单格里正负数各自提取求和,如这样,提取A1 单元与B1的数字,1、10、55在C1求和。提取-20、-2、-122在D1求和,求这两个公式,请指教! 你可以直接 copy 这几个公式 C1: =SUMIF(D3:D11,">0") D1: =SUMIF(D3:D11,"<0") C2: =SUBSTITUTE(SUBSTITUTE(IF(LEFT(A1,1)="-",0&A1,A1)&IF(LEFT(B1,1)="-",B1,"+"&B1),"+",","),"-",",-")&"," C4: =FIND(",",C$2,C3+1) D3: =VALUE(MID($C$2,C3+1,C4-C3-1)) 甚至可以适用于类似 3+12-45+32+2 和 8-9-111+6 等复杂情况。 如果你非得用一个函数实现(不用任何辅助单元格),需要用VB。 补充回答: VB 方法如下, 在Excel里,同时按Alt和F11,进入VB界面,右键点左上窗口的 Thisworkbook,插入,模块,在右边窗口粘贴如下代码: Function SumP(Range1 As Range, Range2 As Range) As Long Dim i, j As Byte Dim tmp As String SumP = 0 j = 1 tmp = IIf(Left(Range1, 1) = "-", Range1, " " & Range1) & IIf(Left(Range2, 1) = "-", Range2, "+" & Range2) & " " tmp = Replace(tmp, "-", " -") tmp = Replace(tmp, "+", " ") For i = 1 To Len(tmp) - Len(Replace(tmp, " ", "")) - 1 If CLng(Trim(Mid(Left(tmp, InStr(j + 1, tmp, " ") - 1), j + 1, 10))) > 0 Then SumP= SumP+ CLng(Trim(Mid(Left(tmp, + 1, tmp, " ") - 1), j + 1, 10))) j = InStr(j + 1, tmp, " ") Next i End Function Function SumN(Range1 As Range, Range2 As Range) As Long Dim i, j As Byte Dim tmp As String SumN = 0 j = 1 tmp = IIf(Left(Range1, 1) = "-", Range1, " " & Range1) & IIf(Left(Range2, 1) = "-", Range2, "+" & Range2) & " " tmp = Replace(tmp, "-", " -") tmp = Replace(tmp, "+", " ") For i = 1 To Len(tmp) - Len(Replace(tmp, " ", "")) - 1 If CLng(Trim(Mid(Left(tmp, InStr(j + 1, tmp, " ") - 1), j + 1, 10))) < 0 Then SumN= SumN+ CLng(Trim(Mid(Left(tmp, + 1, tmp, " ") - 1), j + 1, 10))) j = InStr(j + 1, tmp, " ") Next i End Function 会到 Excel 里,在 C1 输入 =sump(a1,b1) ,在 D1 输入 =sumn(a1,b1)InStr(j InStr(j

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来?2011-04-13 11:25匿名?|?分类:办公软件?|?浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志:2010.01.07) 想在B中表示为 20100107 最好能教一个方法十分感谢 我有更好的答案 按默认排序|按时间排序 2条回答 检举|2011-04-13 11:32Mrpine|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

EXCEL中从一个字符串里提取连续数字引发的思考(二)

EXCEL中从一个字符串里提取连续数字引发的思考(二) 从一个字符串中提取连续数字的函数 =LOOKUP(9E+307,--MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),RO W(INDIRECT("$1:$"&LEN(A1)))))引发的思考(二) 依然假设A1=“总人口7895432个”,A列的内容都是这种形式的,你的任务就是把其中的数字单独提取出来放到B列。以B1单元格为例: 在上一篇中,使用LOOKUP的框架中会使用到MID,思路还显得很曲折和原始,那么可否就直接以MID为框架来提取数字呢?答案是肯定的,思路也比较简洁,尽管使用起来看似复杂,像下面这样写。 =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW(INDIRECT("$A1:$"&"A"&LEN (A1))),1)),0),COUNT(1*MID(A1,ROW(INDIRECT("$A1:$"&"A"&LEN(A1))),1))) 接上篇,讲解之前有必要先来认识下ROW和COLUMN函数,这是取行号和列号的函数,那么其参数必须是引用(单元格、行或列)。比如ROW(C1)=1,COLUMN(C1)=3。将参数里的单一单元格变成单元格矩阵的话,就会返回一个数组,比如ROW(A1:A5)={1;2;3;4;5},按Ctrl+shift+enter结束输入就会看到公式被{}括起来了,说明是一个数组,而单元格里只显示数组的第一个。

常见的懒人写法ROW(1:100)只写了行号,简直是一种赤裸裸的浪费计算资源的写法,从A 到Z有26列,然后AA到AZ、BA到BZ......这样排列组合下来得有26^26种组合了,计算了多少次啊!简直瞎搞嘛,取个行号而已,大可以写成ROW(A1:A100)或ROW(B1:B100)等等简单明了,按需计算100次而已。 所以,在此篇中,ROW(INDIRECT ("$1:$"&LEN(A1))) 升级成 ROW(INDIRECT("$A1:$"&"A"&LEN(A1)))以减轻计算机负荷。 说到正题,用ROW按字符串长度生成一个序列,为什么要用 ROW(INDIRECT("$A1:$"&"A"&LEN(A1))) ,而不能想当然的直接写ROW($1:$LEN(A1))?因为ROW函数的参数必须是引用!静态的写法ROW(1:100)或ROW(A1:A100)是引用,加了LEN函数就变成动态的了,需要间接引用函数Indirect、Offset或Index来帮忙。 一般常见的是组合Indirect的写法,用法就像C语言里的指针一样。在静态写法INDIRECT(A1:A3)下,假设A1单元格的内容是B3,A2单元格内容是"哇哈哈",A3为空,而B3单元格内容是"我靠",则INDIRECT(A1:A3)={"我靠";#REF!;#REF!}。如果加入LEN 函数变成动态的,而且以单元格("A1":"A3")的形式作参数,不会返回单元格的引用值,而是直接返回单元格内容,INDIRECT("$A1:$"&"A"&LEN(A2))={"B3";"哇哈哈";0}。 因为Row和Column可以引用自身,所以Row、Column套任何函数以后,仍然可以引用自身,但Indirect却不行,所以如果直接写Indirect("1:10"),那么公式不能写在1至10

excel提取文本中数字公式

Excel提取文本中数字公式 第一种,如图,如果数字在中文的后面,那么使用公式:"=--RIGHT(A2,LEN(A2) *2-LENB(A2))"解释下:因为中文字符是占两个字节。而数字占一个字节。len 返回值是字符的个数。而lenb返回值是这个字符串占多少个字节。所以,这两个的差值就是一个有几个中文。LENB(A2)-LEN(A2) = 中文实际个数字符总数-中文个数=数字个数LEN(A2)-(LENB(A2)-LEN(A2) )=数字个数开括号数字个数=LEN(A2)*2-LENB(A2)。因为数字在右边,所以,利用RIGHT,获取从右边第一个开始到最后一个数字,就得到这个数值。 第二种:数字在中文的前面。实际上和第一种的方法是一样的,这儿只是取数字的时候,从左边开始。公式: "=--LEFT(A2,LEN(A2)*2-LENB(A2))" 第三种:混搭。这个其实就是加个判断,判断第一个字符是数字还是中文。如果是数字,那么就用上面的第二个公式,中文就用第一个公式。公式:“=IF(ISN UMBER(--LEFT(A2,1)),--RIGHT(A2,LEN(A2)*2-LENB(A2)),--LEFT(A2,LEN(A2)* 2-LENB(A2)))” ============================================= excel从特殊字符串提取指定数据

在日常工作中,常常会遇到以下的参数: 如何把直径单独提取出来,以便进行直径比较或按直径汇总。 步骤/方法 选定直径的提取单元格,输入如图所示的公式,回车即可。 下拉表格,将公式复制至其他表格,这样就完美的提取出规格数据中的直径数值,之后就可以进行数据分类和汇总了。

C语言-获取一个字符串中的数字组

/*输入一个字符串,内有数字和非数字字符,如a123x456_17960? 302tab5876,将其中连续的数字作为一个整数,请统计出一共有多少个整数,输出这些整数,并求出最长的整数的位数。*/ 说明:i,j,k用来遍历,flag作为是否是数字的标志,max表示最长的连续数字串,str[100]用来存放输入的字符串,a[10][10]用来存放数字串,最多可存放10组连续的数字,,,, #include #include main() {int i,j=0,k,flag=0,max=0; char str[100],a[10][10]; printf("请输入一串字符(包括数字)\n"); gets(str); for(i=0;str[i]!='\0';i++) if(48<=str[i]&&str[i]<=57) {if(flag==0) {j++; k=0; a[j][k]=str[i]; k++; flag=1;} else if(str[i+1]=='\0') { a[j][k]=str[i]; a[j][k+1]='\0'; } else { a[j][k]=str[i]; k++; } } else if(flag==1) { if(k>max) max=k; a[j][k]='\0'; flag=0; } printf("输入的字符串中,最长的数字串有%d位数字。数字串一共有%d个,分别是:\n",max,j); for(i=1;i<=j;i++) printf("%s\n",a[i]); }

程序大致流程图如下(“<=”是赋值):

sql取出字符串中的汉字-字母或是数字

go --创建函数(得到字符串中的汉字) create function [dbo].[m_getchinese] ( @chinese nvarchar(max) ) returns varchar(100) as begin while patindex('%[^吖-咗]%',@chinese)> 0 begin set @chinese =stuff(@chinese,patindex('%[^吖- 咗]%',@chinese),1,N''); end return @chinese end go --创建函数(得到字符串中的字母) create function [dbo].[m_getstr](@maco varchar(100)) returns varchar(max) as begin while patindex('%[^a-z]%',@maco)> 0 begin set @maco=stuff(@maco,patindex('%[^a-z]%',@maco),1,'') end return @maco end go --创建函数(得到字符串中的数字) create function [dbo].[m_getnumber] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200) select @mysql_two=

substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),patindex('%[ ^0-9.]%',substring(@mysql_one,patindex('%[0-9.]%',@mysql_one), len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))-1) return @mysql_two; end --测试 select dbo.[m_getchinese]('China2009中国HRB4-1v') select dbo.[m_getstr]('China2009中国HRB4-1v') select dbo.[m_getnumber]('China2009中国HRB4-1v') --运行结果 /* ----------- 中国 ----------- ChinaHRBv ----------- 2009 */ --说明一下 --上面这个取数字是可以取浮点型的 select dbo.[m_getnumber] ('字段.456A(AA)A')--正常 select dbo.[m_getnumber] ('CHinese2.1day')--正常 select dbo.[m_getnumber] ('Name5.01From')--正常 select dbo.[m_getnumber] ('9898Address')--正常 select dbo.[m_getnumber] ('aaaaaForm2.3333')--错误 --修正函数 go /* 取出字符串中间的数字(第二版)*/ create function [dbo].[m_getnumberV2.0] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200)

用函数在Excel中从文本字符串提取数字

用函数在Excel中从文本字符串提取数字 Excel输入数据过程中,经常出现在单元格中输入这样的字符串:GH0012JI、ACVB908、华升12-58JK、五香12.56元、0001#、010258等。在进行数据处理时,又需要把其中的数字0012、908、12-58、12.56、0001提取出来。 如何通过使用Excel的工作表函数,提取出字符串中的数字? 一、问题分析 对于已经输入单元格中的字符串,每一个字符在字符串中都有自己固定的位置,这个固定位置都可以用序列数(1、2、3、……)来表示,用这些序列数可以构成一个可用的常数数组。 以字符串“五香12.56元”为例:序列数1、2、3、4、5、6、7、8分别对应着字符串“五香12.56元”中字符“五”、“香”、“1”、“2”、“.”、“5”、“6”、“元”。由序列数组成一个保存在内存中的新数组{1;2;3;4;5;6;7;8}(用列的形式保存),对应字符串中的字符构成的数组{“五”;“香”;“1”;“2”;“.”;“5”;“6”;“元”}。因此解决问题可以从数组着手思考。 二、思路框架 问题的关键是,如何用序列数重点描述出字符串中的数字部分的起始位置和终止位置,从而用MID函数从指定位置开始提取出指定个数的字符(数字)。 不难看出,两个保存在内存中的新数组: {“五”;“香”;“ 1”;“2”;“.”;“5”;“6”;“元”} {1;2;3;4;5;6;7;8} 数组具有相同大小的数据范围,而后一个数组中的每一个数值可以准确地描述出字符串中字符位置。 字符与序列数的对应关系如下表所示: 字符字符位置

五—— 1 香—— 2 1 —— 3 2 —— 4 . —— 5 5 —— 6 6 —— 7 元—— 8 所以解决问题的基本框架是: 用MID函数从字符串的第一个数字位置起提取到最后一个数字止的字符个数。即{=MID(字符串,第一个数字位置,最后一个字符位置-第一个字符位置+1}。其中“+1”是补上最后一个数字位置减去第一个数字位置而减少的一个数字位。 三、解决方案及步骤 假定字符串输入在A2单元格。 ⑴确定A2中字符串的长度。 即用LEN函数计算出A2中字符串中字符的个数,这个字符个数值就是字符串中最后一个字符在字符串中的位置:=LEN(A2)。 ⑵确认字符串中的每一个字符位置序列数组成的新数组。 用INDIRECT函数返回一个由文本字符串指定的引用:

几种PHP提取字符串中的数字

第一种方法,使用正则表达式: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $reg='/(\d{3}(\.\d+)?)/is';//匹配数字的正则表达式 preg_match_all($reg,$str,$result); if(is_array($result)&&!empty($result)&&!empty($result[1])&&!empty($result[1][0])){ return $result[1][0]; } return ''; } 第二种方法,使用in_array方法: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $temp=array('1','2','3','4','5','6','7','8','9','0'); $result=''; for($i=0;$i

汉字基本笔画书写技巧

汉字基本笔画书写技巧

汉字基本笔画书写技巧 一、横的写法 在各种基本笔画中,横画应用最多。横在一个字中起着横梁的作用。在楷书中,横画写得好坏,关系到字的骨力。特别是长横,一定要写得平稳、劲健、厚重、灵动。切不可写的死气沉沉,呆如木棍。横有长横及短横之分。 1、长横 长横的写法为:下笔顿笔,由重到轻,再由轻到重,向右行笔,最后回锋收笔。书写长横时,心里可默念口诀:“重——轻——重——回锋”。长横在每个字中都是主要笔画。一定要认真写好。 长横的形态是两边粗,中间细,中间略微有向上的弧度,看上去好似一条拱形的大桥。书写时略向上倾斜,倾斜幅度为3度——5度之间。如:“一”字。 2、短横 短横又叫“左尖横”。写法为起笔轻,由轻到重,向右行笔,最后回锋收笔。写短横时心里要默念口诀:“轻——重——回锋”。

垂露竖的样子就象一根草棍上附着一滴水珠,又象一个人立正的样子,胸腰挺起,精神抖擞,雄赳赳,气昂昂,切不可左斜右歪,更不能弯腰曲背。如:“土、干”等字。 3、悬针竖 写法为下笔顿笔,向下行笔,行笔到位后,向下逐渐提笔收笔。口诀:“顿笔——行笔——收笔”。悬针竖多为主笔,要认真练好。 悬针竖如同一根尖朝下竖立的钢针。写时要注意力到笔尖,要写得锋利劲健,切不可至尾处飘曲而出。如:“十、丰”等字。 4、短竖 短竖的起笔与垂露、悬针竖基本相同,只是向下行笔至尽端有横托住,所以自然提笔离纸即可。口诀:“顿笔——行笔——收笔”。一般情况下,短竖与垂露竖可通用。如:“上、正”等字。 三、撇的写法 撇的写法特别多。按方向分有平撇、斜撇(斜撇又分短撇与长撇)、竖撇等;按用笔来分,有回锋撇、兰叶撇、弯头撇等。撇画在一个字中很有装饰性,如能写得自然舒展,会增加字的美感。这里先介绍平撇、短撇、长撇、竖撇。 1、平撇 平撇写法为下笔顿笔,然后向左方(略向下)撇出。平撇多出现在竖或竖弯钩的上面。口诀:“顿笔——撇出”。如:“千、壬”等字。 2、短撇

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

e x c e l中一个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字 公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来?2011-04-13 11:25匿名?|?分类:?|?浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志: 想在B中表示为 最好能教一个方法十分感谢 我有更好的答案 按默认排序| 2条回答 |2011-04-13 11:32|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1)

If SigS Like "[a-zA-Z]" Then StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1

(完整版)汉字基本笔画书写规则

- 1 - 钢笔楷书笔画书写规则(特点与写法) (一)横 横 横画要写平稳,因为横在一个字中起平衡作用,横不平,则字不稳。横有长、短、斜横之分。 长横的写法,下笔稍重、行笔向右较轻,收笔略向右按一下,整个笔画呈左低右高、向下俯势的形态。由于人的视觉的错觉,横画不能写成水平,而应写成左低右高,收笔时稍按一下笔,使笔画变重些,这样,看起来才显得平稳。人们常说的“横平竖直”,不是指横水平书写,而是要求看上去平稳的意思。如图:

短横的写法是,轻下笔,由轻到重向右行笔大约写到长横的一半时停笔即收。笔画稍向右上仰。如图: (二)竖 竖竖画要写垂直,因为竖画在一个字中往往起着关键的支撑作用,竖不垂直,则字不正。竖有垂露、悬针和短竖之分。 垂露竖的写法,下笔稍重,行笔垂直向下较轻,收笔稍重。如图: - 2-

悬针竖的写法同垂露,只是收笔时由重到轻,出锋收笔,笔画出尖。如图: 短竖,写法同垂露竖,只是笔画较短,短竖要写得短粗有力。如图: (三)撇 撇撇画在一个字中很有装饰性,如能写得自然舒展,会增加字的美感,有时还与捺画相对称,起着平衡和稳定重心的作用。撇有斜撇、竖撇、短撇和平撇之分。 斜撇的写法是,下笔稍重,由重到轻向左下行笔,收笔时出尖。如图: - 3-

竖撇下笔稍重,由重到轻向下行笔,行至撇的长度三分之二处,向左下撇出,收笔时出尖,如图: 短撇写法同斜撇,只是笔画较短。短撇在字头出现时,笔画形态较平,如“干、反、禾、后丢”等字;短撇在字的左上部位出现时,笔画形态较斜,如“生、禾、失、朱”等字。如图: - 4-

捺捺画粗细分明,运笔轻重多变,书写难度较大。捺有斜捺和平捺之分。 斜捺下笔较轻(轻落笔),向右下由轻到重行笔,行至捺脚处重按笔,然后向右水平方向由重到轻提笔拖出,收笔要出尖。如图: 平捺写法同斜捺,但下笔时先要写一小短横,然后再向右下(略平一些)方向行笔。如图: - 5-

Excel中英文及数字字符的提取技巧

中英文及数字字符的提取技巧 从混排文字中提取连续数字 如图1-1所示,A列中有一些产品规格型号,其中包含了连续数字,且数字均位于字符串的末尾,数字之后没有其他字符跟随。要从这样的文本字符串中提取连续数字,可在B2单元格中输入以下公式并向下填充: =-LOOKUP(9.9E+307,--RIGHT(A2,ROW($1:$99))) 图1-1 提取连续数字 公式解析: 公式通过依次提取字符串右侧的连续1~n个字符,形成一个数组,然后通过LOOKUP函数可以查找其中最大的数值的功能,找出其中包含连续数字最多的那个数。9.9E+307是科学计数法的表示方式,表示9.9乘以10的307次方,这是Excel里面超级大的一个数,以这个数作为LOOKUP函数的查询对象,只要数组中的数值小于它就能被查询得到。 事实上,这个公式还有不少局限性,例如一些数学符号会对结果产生影响,超过15位有效数字的连续数字也会不能被正确提取等等。 假设目标字符串的数字位于字符串中部,前后都有非数字字符与其相连,如图1-2中A列的型号所示。对于这种情况,在原公式基础上进行一些修改: =LOOKUP(9.9E+307,--MID(A2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&1234567890)), ROW($1:$99)))

图1-2 数字位于字符串中部 这个公式通过FIND函数来定位首个数字出现的位置,然后通过MID函数来依次取出连续的1~n个字符。再参照前面公式的思路得到最后结果。 从混排文字中提取连续字母 如图1-3表格所示,A列中有一些车牌编号,其中包含了连续英文字母,且字母均位于字符串的中部。不考虑字母后跟随数字的特殊性,要从这样的文本字符串中提取连续字母,可在B2单元格中输入以下数组公式并向下填充: {=MID(A2,MATCH("z",TEXT(CODE(MID(UPPER(A2),ROW($1:$99),1))-64,"[>26];;z") ,0),COUNT(N(INDIRECT(MID(A2,ROW($1:$99),1)&"1"))))} 图1-3 提取连续英文字母 公式解析: 此公式主体结构是通过MID函数取出字符串中的连续字符,其中包含了两种鉴别英文字母的方法。 CODE(MID(UPPER(A2),ROW($1:$99),1))可以返回字符串中每个字符的ASCII代码,其中在65~90之间的就是英文大写字母的ASCII码。 INDIRECT(MID(A2,ROW($1:$99),1)&"1")部分则是利用了字母+数字的形式在Excel中是

从字符串中提取连续的字符数字转换为整数

/* *从字符串中提取连续的字符数字转换为整数 */ #include #include"string.h" void main() { char c[100]; bool find=false; int sum[30],num[50],i=0,l,s=0,N=1,g=0; printf("请输入一含有数字的字符串:\n"); gets(c); l=strlen(c); while(true)//判断字符串中是否有字符数字,有则执行下一步,没有则重新输入 { while(l) { if(c[l]>='0'&&c[l]<='9')//判断是否含有数字字符 { find=true; break; } l--; } if(find) break;//有数字则退出循环 else printf("没有数字!!! 请重新输入:\n"); gets(c);//没有则重新出入 l=strlen(c); } l=strlen(c); printf("字符串长度为:%d\n",l); for(i=0;i='0')&&(c[i]<='9')) { sum[s++]=c[i]-48;//单个字符数字转换为数字 N*=10; if(c[i+1]<='0'||c[i+1]>='9'||c[i+1]=='\0')//判断下一个字符是否为字符数字,不是则执行下一步,即是否是一个连续的数 { num[g]=0;

N/=10; for(int j=0;j

EXCEL中从一个字符串里提取连续数字引发的思考(一)

EXCEL中从一个字符串里提取连续数字引发的思考(一) 从一个字符串中提取连续数字的函数 =LOOKUP(9E+307,--MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),RO W(INDIRECT("$1:$"&LEN(A1))))) 引发的思考(一) 假设A1=“总人口7895432个”,A列的内容都是这种形式的,你的任务就是把其中的数字单独提取出来放到B列。以B1单元格为例: 此函数的思路就是先在A1中找到第一个数字的位置,依次1位、2位……的提取出来,很显然最后一个数字就是需要的结果。函数框架就是find找数字出现的位置,通过min过滤出第一个位置,mid从此位置开始提取,提取的位数由row升序排列,然后转换成数字,最后用lookup找出其中最大的数。 首先用FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")找出A1中数字所在的位置,因为{0,1,2,3,4,5,6,7,8,9}是一个数组,则返回值也是一个数组,按F9试算就一目了然;不过,B1单元格里只会出现第一个数字”0”的位置。要避免出现#value错误,那么A1必须要串联一串数字,A1&"0123456789"就是这个原因。 有些屌丝为了显示高深莫测,把数组{0,1,2,3,4,5,6,7,8,9}写成数组ROW($1:$10)-1来显摆;把A1&"0123456789"写成A1&5^19来浪费计算资源!就为了表示他知道 5^19=19073486328125,包含了0到9的所有数字!

min(find)的结果才是需要的,在find的结果中找出最小的数字,也就是A1中数字最高位”7”所在的位置4。至此,mid函数的第一个参数单元格A1,第二个参数4都有了,第三个参数就要用row函数来决定了。 ROW(INDIRECT("$1:$"&LEN(A1)))={1;2;3;4;5;6;7;8;9;10;11}。有些屌丝爱写成row ($1:$1024)浪费计算资源,就为了表示他知道excel限制单元格内最多可以输入1024个字符! 关于row函数为什么要这样写,而不直接写成ROW($1:$LEN(A1))请听下回分解。 因为row返回的是一个数组,那么mid也跟着返回一个数组{"7";"78";"789";"7895";"78954";"789543";"7895432";"7895432个";"7895432个";"7895432个";"7895432个"},现在还是字符状态,用两个减号“--”跟在mid前面,负负得正转换成数字,则数字都提取完之后再提取的带字符“个”的就会提示#VALUE!错误,结果就是{"7";"78";"789";"7895";"78954";"789543";"7895432";#VALUE!;#VALUE!; #VALUE!; #VALUE!},为后面的lookup作铺垫。 最后使用lookup在mid返回的数组中找"最大的数",为啥这个"最大的数"要加引号呢?因为找到的并不一定就是数组中最大的数。此函数比较笨,首先,并不是精确查找,在数组中刚好有等于查找值的情况下返回的是正确的逻辑结果;在找不到查找值的情况下,则是取数组中的最后一个小于查找值、并且最接近于它的数!要想找到mid返回的数组中的最大值,

如何提取excel中的一段数字文字符

如何提取e x c e l中的一段数字文字符 标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

一、单元格A1中有如下内容:要提取出数字 提取Excel单元格中连续的数字的函数公式是: =LOOKUP(9E+307,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&90)),ROW($1:$8))) 或者 =LOOKUP(9E+307,--MID(H2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},H2&90)),ROW(INDIRECT(" 1:"&LEN(H2))))) 解释一下这个公式 FIND函数——查询文本所在位置 FIND(find_text,within_text,[start_num]) FIND(需查找的文本,包含查找文本的单元格,开始查找单元格的字符位置(可选)) 此处FIND函数是搜索{1,2,3,4,5,6,7,8,9,0}数字在“A1&90”中所在的位置; A1&90的目的是在用FIND函数查询时,不出现错误值,使之后的MIN函数可以正常运行。 即FIND({1,2,3,4,5,6,7,8,9,0},“小王联系电话负责财务90”) 选取划黑后按F9,得出的位置为:{19,20,21,22,7,9,10,8,13,11} MIN函数——返回列表中的最小值 MIN(number1,number2,……) MIN(数字1,数字2,……) 将FIND所得结果{19,20,21,22,7,9,10,8,13,11}带入MIN函数,最小值所得为7,正是第一个数值出现的位置; 也正是之前FIND函数中使用A1&90的原因。

相关主题