VB字符串处理函数一览

VB字符串处理函数一览


mid(字符串,从第几个开始,长度) ByRef 在[字符串]中[从第几个开始]取出[长度个字符串]  
例如 mid("小欣无敌",1,3) 则返回 "小欣无"  

instr(从第几个开始,字符串1,字符串2) ByVal 从规定的位置开始查找,返回字符串2在字符串1中的位置  
例如 instr(1,"小欣无敌","小") 则返回 1,instr(2,"小欣无敌","小"),则返回 0 。 0 表示未找到  

InStrRev(字符串1,字符串2,从第几个开始) ByVal 从规定的位置开始,从后住前查找,返回字符串2在字符串1中的位置,此处注意,虽是从后住前查找,但是返回的值还是从前往后算的。  
例如 instrRev("小欣无敌","小",2) 则返回 2 ; instrRev("小欣无敌","欣",1) 则返回 0 ,因为它从"小欣无敌"的第1个字开始往前查找,所以找不到 。0 表示未找到  

left(字符串,长度) ByVal 从[字符串]的左边开始返回[长度]个字符  
例如 Left("小欣无敌,3) 则返回 "小欣无"  

right(字符串,长度) ByVal 从[字符串]的右边开始返回[长度]个字符  
例如 Right("小欣无敌",3) 则返回 "欣无敌"  

ucase(字符串) ByVal 返回[字符串]的大写形式,只对英文字符有效  
例如 ucase("xiaoXINwuDi") 则返回 "XIAOXINWUDI"  



lcase(字符串) ByVal 返回[字符串]的小写形式,只对英文字符有效  
例如 lcase("xiaoXINwuDi") 则返回 "xiaoxinwudi"  

asc(字符) Byval返回[字符]的ascii编码,若有多个字符,则只返回首字符的ascii编码,和Chr()函数是一个可逆的过程  
例如 asc("小") 则返回 -12127 ; asc("小欣无敌") 也返回 -12127  

chr(ASCii编码) Byval 返回[Ascii]编码所代表的字符,和Chr()函数是一个可逆的过程  
例如 chr(-12127) 则返回 "小" ;chr(asc("小")) 则返回"小"(这里是为了说明asc和chr的可逆性,例用此特性可以加密文本)  

trim(字符串) Byval 返回去掉了前、后之后的[字符串]  
例如 trim("   小 欣   无敌   ") 则返回 "小 欣   无敌" ,中间的空格不受任何影响  

string(个数,字符) Byval 返回[个数]个[字符]  
例如 string(3,"小") 则返回 "小小小" , 而 string(3,"小欣无敌") 也返回 "小",只有首字符才有效  

space(个数) Byval 返回[个数]个空格  
例如 space(5) 则返回 "   "  

strconv(字符串,转换的类型) Byval 将字符串转成指定的类型。常用的类型只有两个,vbwide 半角转成全角,vbNarrow 全角转成半角  
例如 strconv("xiao",vbwide) 则返回 "XIAO",而strconv("XIAO",vbnarrow) 则返回 "XIAO"  
’备注 vbwide = 4 ,vbnarrow = 8  

len(字符串) Byval 返回[字符串]的长度  
例如 len("小欣无敌") 则返回 4

字节操作函数
midb()
leftb()
rightb()
chrb()
lenb()

UNICODE的ASC码处理
chrw()
ascw()

去空格
ltrim
rtirm

拆分合并
split()
join()

翻转
srereverse()

替换
replace()
AscB(String As String) As Byte
返回字符串中第一个字节的值
例如:AscB("坦然")则返回102

AscW(String As String) As Integer
返回字符串中第一个字符的本机字符代码 (Unicode 或 ANSI)
例如:AscW("坦然")则返回22374

ChrW(CharCode As Long)
返回一个包含指定本机字符的字符串(Unicode 或 ANSI)
例如:ChrW(22374)则返回"坦"

Filter(InputStrings, Value[, Include[, Compare]])
返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。
InputStrings 必需的。要执行搜索的一维字符串数组。 
Value 必需的。要搜索的字符串。 
Include 可选的。Boolean值,表示返回子串包含还是不包含Value字符串。如果Include是True,Filter返回的是包含Value子字符串的数组子集。如果Include是False,Filter返回的是不包含Value子字符串的数组子集。 
Compare 可选的。数字值,表示所使用的字符串比较类型。有关其设置,请参阅下面的“设置值”部分。 
Compare参数的设置值如下:
vbUseCompareOption –1 使用Option Compare语句的设置值来执行比较。 
vbBinaryCompare 0 执行二进制比较。 
vbTextCompare 1 执行文字比较。 
vbDatabaseCompare 2 只用于Microsoft Access。基于您的数据库信息来执行比较。 
例如:
Dim a(3) As String
a(0) = "坦"
a(1) = "坦然"
a(2) = "坦然面"
a(3) = "坦然面对"
b = Filter(a, "然")
则b(0) = "坦然"
b(1) = "坦然面"
b(2) = "坦然面对"

Join(list[, delimiter]) As String
返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。
list 必需的。包含被连接子字符串的一维数组。 
delimiter 可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项,则使用空格(" ")来分隔子字符串。如果delimiter是零长度字符串(""),则列表中的所有项目都连接在一起,中间没有分隔符。 
例如:
Dim a(3) As String
a(0) = "坦"
a(1) = "坦然"
a(2) = "坦然面"
a(3) = "坦然面对"
b = Join(a, "+")
则b = "坦+坦然+坦然面+坦然面对"

LeftB(String, Length As Long)
从一个字符串的左边起返回指定数目的字节
例如:
a = LeftB("坦然面对", 4)
则a = "坦然"

LenB(Expression)
返回存储一个变量所需的字节数
例如:a = LenB("坦然面对")
则a = 8

LTrim(String)
返回无前导空格的字符串的备份
RTrim(String)
返回一个无后缀空格的字符串的备份
例如:
a = LTrim(" 坦然面对 ")
b = RTrim(" 坦然面对 ")
则a = "坦然面对 "
b = " 坦然面对"

MidB(String, Start As Long, [Length])
从一个字符串中返回指定数目的字节
例如:
a = MidB("坦然面对", 3, 4)
则a = "然面"

MonthName(Month As Long, [Abbreviate As Boolean = False]) As String
返回一个表示指定月份的字符串。
abbreviate 可选的。Boolean值,表示月份名是否缩写。如果忽略,缺省值为False,表明月份名不能被缩写。 
例如:
a = MonthName(5)
则a = "五月"

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。
expression 必要参数。任何有效的表达式。 
format 可选参数。有效的命名表达式或用户自定义格式表达式。 
firstdayofweek 可选参数。常数,表示一星期的第一天。 
firstweekofyear 可选参数。常数,表示一年的第一周。 
firstdayofweek 参数有下面设置:
vbUseSystem 0 使用 NLS API 设置。 
VbSunday 1 星期日(缺省) 
vbMonday 2 星期一 
vbTuesday 3 星期二 
vbWednesday 4 星期三 
vbThursday 5 星期四 
vbFriday 6 星期五 
vbSaturday 7 星期六 
firstweekofyear 参数有下面设置:
vbUseSystem 0 使用 NLS API 设置。 
vbFirstJan1 1 从包含一月一日的那一周开始(缺省)。 
vbFirstFourDays 2 从本年第一周开始,而此周至少有四天在本年中。 
VbFirstFullWeek 3 从本年第一周开始,而此周完全在本年中。

示例
a = Format(#4/19/2008 1:01:05 PM#, "yyyy-mm-dd,ddd,hh:mm:ss")
a = "2008-04-19,Sat,13:01:05"
a = Format(#4/19/2008 1:01:05 PM#, "yyyy-mm-dd,dddd,h:m:s")
a = "2008-04-19,Saturday,13:1:5"
a = Format(#4/19/2008 1:01:05 PM#, "m-d-yy ampm h/m/s")
a = "4-19-08 PM 1-1-5"
a = Format(1234567.89, "#,#.#00")
a = "1,234,567.890"
a = Format(0.12358, "#%")
a = "12%"
a = Format(0.12358, "#.#0%")
a = "12.36%"
a = Format(0.12358, "#.#000%")
a = "12.3580%"
a = Format("TaNrAnMiAnDuI", ">")
a = "TANRANMIANDUI"
a = Format("TaNrAnMiAnDuI", ">")
a = "tanranmiandui"
总之,Format功能很强大,可替代许多函数。

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])
返回一个货币值格式的表达式,它使用系统控制面板中定义的货币符号。
Expression 必需的。要格式化的表达式。 
NumDigitsAfterDecimal 可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 
IncludeLeadingDigit 可选的。三态常数,表示小数点前是否显示一个零。
UseParensForNegativeNumbers 可选的。三态常数,表示是否把负数值放在园括号内。 
GroupDigits 可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符由计算机的区域设置值指定。 
IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits参数的设置值如下:
TristateTrue –1 True 
TristateFalse 0 False 
TristateUseDefault –2 使用计算机区域设置中的设置值。 
示例
a = FormatCurrency(1234567.89)
a = ¥1,234,567.89
a = FormatCurrency(1234567.89, 0)
a = ¥1,234,568
a = FormatCurrency(1234567.89, 3)
a = ¥1,234,567.890
a = FormatCurrency(0.15, , vbFalse)
a = ¥.15
a = FormatCurre

FormatDateTime(Date[,NamedFormat])
返回一个日期或时间格式的表达式。
Date 必需的。要被格式化的日期表达式。 
NamedFormat 可选的。数字值,表示日期/时间所使用的格式。如果忽略该值,则使用vbGeneralDate。 
NamedFormat参数的设置值如下:
vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则用短日期格式显示。如果有时间部分,则用长时间格式显示。如果都有,两部分都显示。 
vbLongDate 1 用计算机区域设置值中指定的长日期格式显示日期。 
vbShortDate 2 用计算机区域设置值中指定的短日期格式显示日期。 
vbLongTime 3 用计算机区域设置值中指定的时间格式显示时间。 
vbShortTime 4 用24小时格式(hh:mm)显示时间。

示例
a = FormatDateTime(#4/19/2008 2:54:23 PM#, vbGeneralDate)
a = 2008-4-19 14:54:23
a = FormatDateTime(#4/19/2008 2:54:23 PM#, vbLongDate)
a = 2008年4月19日星期六
a = FormatDateTime(#4/19/2008 2:54:23 PM#, vbShortDate)
a = 2008-4-19
a = FormatDateTime(#4/19/2008 2:54:23 PM#, vbLongTime)
a = 14:54:23
a = FormatDateTime(#4/19/2008 2:54:23 PM#, vbShortTime)
a = 14:54


FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])
返回一个数字格式的表达式。
Expression 必需的。要被格式化的表达式。 
NumDigitsAfterDecimal 可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 
IncludeLeadingDigit 可选的。三态常数,表示小数点前是否显示零。 
UseParensForNegativeNumbers 可选的。三态常数,表示是否把负数值放在圆括号内。 
GroupDigits 可选的。的三态常数,表示是否用组分隔符对数字分组,组分隔符在计算机的区域设置值中指定。 
IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下:
TristateTrue –1 True 
TristateFalse 0 False 
TristateUseDefault –2 用计算机区域设置值中的设置值。

示例
a = FormatNumber(-1234567.89, 4, vbTrue, vbTrue, vbTrue)
a = (1,234,567.8900)
a = FormatNumber(-1234567.89, 4, vbFalse, vbFalse, vbFalse)
a = -1234567.8900


FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])
返回一个百分比格式(乘以100)的表达式,后面有%符号。
Expression 必需的。要格式化的表达式。 
NumDigitsAfterDecimal 可选的。表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 
IncludeLeadingDigit 可选的。三态常数,表示小数点前是否显示零。 
UseParensForNegativeNumbers 可选的。三态常数,表示是否把负数放在圆括号内。 
GroupDigits 可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符在计算机的区域设置值中指定。 
IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下:
TristateTrue –1 True 
TristateFalse 0 False 
TristateUseDefault –2 使用计算机区域设置值中的设置值。

示例
a = FormatPercent(-1234567.89, 4, vbFalse, vbFalse, vbFalse)
a = -123456789.0000%
a = FormatPercent(-1234567.89, 4, vbTrue, vbTrue, vbTrue)
a = (123,456,789.0000%)

Replace(expression, find, replacewith[, start[, count[, compare]]])
返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。
expression 必需的。字符串表达式,包含要替换的子字符串。 
find 必需的。要搜索到的子字符串。 
replacewith 必需的。用来替换的子字符串。 
start 可选的。在表达式中子字符串搜索的开始位置。如果忽略,假定从1开始。 
count 可选的。子字符串进行替换的次数。如果忽略,缺省值是 –1,它表明进行所有可能的替换。 
compare 可选的。数字值,表示判别子字符串时所用的比较方式。 
compare参数的设置值如下:
vbUseCompareOption –1 使用Option Compare语句的设置值来执行比较。 
vbBinaryCompare 0 执行二进制比较。 
vbTextCompare 1 执行文字比较。 
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。 

示例
a = Replace("坦坦然坦然面坦然面对", "然", "对")
a = "坦坦对坦对面坦对面对"
a = Replace("坦坦然坦然面坦然面对", "然", "对", 5)
a = "对面坦对面对"
a = Replace("坦坦然坦然面坦然面对", "然", "对", , 2)
a = "坦坦对坦对面坦然面对"


RightB(String, Length As Long)
从字符串的右边起返回指定数目的字节
示例
a = RightB("坦然面对", 4)
a = "面对"


Split(expression[, delimiter[, count[, compare]]])
返回一个下标从零开始的一维数组,它包含指定数目的子字符串。
expression 必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。 
delimiter 可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。 
count 可选的。要返回的子字符串数,–1表示返回所有的子字符串。 
compare 可选的。数字值,表示判别子字符串时使用的比较方式。 
compare参数的设置值如下:
vbUseCompareOption –1 用Option Compare语句中的设置值执行比较。 
vbBinaryCompare 0 执行二进制比较。 
vbTextCompare 1 执行文字比较。 
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。

示例
a = Split("坦 坦然 坦然面 坦然面对")
a(0) = "坦" ; a(1) = "坦然" ; a(2) = "坦然面" ; a(3) = "坦然面对"
a = Split("坦!坦然!坦然面!坦然面对", "!")
结果同上。
a = Split("坦!坦然!坦然面!坦然面对", "!", 2)
a(0) = "坦" ; a(1) = "坦然!坦然面!坦然面对"

StrComp(string1, string2[, compare])
返回 Variant (Integer),为字符串比较的结果。
string1 必要参数。任何有效的字符串表达式。 
string2 必要参数。任何有效的字符串表达式。 
Compare 可选参数。指定字符串比较的类型。如果 compare 参数是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。 
compare 参数设置为:
vbUseCompareOption -1 使用Option Compare语句设置执行一个比较。 
vbBinaryCompare 0 执行一个二进制比较。 
vbTextCompare 1 执行一个按照原文的比较。 
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库信息的比较。 
StrComp 函数有下列返回值:
string1 小于 string2 -1 
string1 等于 string2 0 
string1 大于 string2 1 
string1 或 string 2为 Null Null 

示例
a = StrComp("坦", "然")
a = -1
a = StrComp("面", "然")
a = 1
a = StrComp("然", "然")
a = 0
a = StrComp("然", Null)
a = Null

StrConv(string, conversion, LCID)
返回按指定类型转换的 Variant (String)。
string 必要参数。要转换的字符串表达式。 
conversion 必要参数。Integer。其值的和决定转换的类型。 
LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。) 
conversion 参数的设置值为:
vbUpperCase 1 将字符串文字转成大写。 
vbLowerCase 2 将字符串文字转成小写。 
vbProperCase 3 将字符串中每个字的开头字母转成大写。 
vbWide 4 将字符串中单字节字符转成双字节字符。 
vbNarrow 8 将字符串中双字节字符转成单字节字符。 
vbKatakana 16 将字符串中平假名字符转成片假名字符。
vbHiragana 32 将字符串中片假名字符转成平假名字符。 
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。 
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。


示例
a = StrConv("how do you do", vbUpperCase)
a = "HOW DO YOU DO"
a = StrConv("HOW DO YOU DO", vbLowerCase)
a = "how do you do"
a = StrConv("how do you do", vbProperCase)
a = "How Do You Do"
vbWide vbNarrow 见原文
a = StrConv("坦然面对", vbUnicode)
a = "fW6qb楖["
a = StrConv("fW6qb楖[", vbFromUnicode)
a = "坦然面对"

StrReverse(string1)
返回一个字符串,其中一个指定子字符串的字符顺序是反向的。
示例
a = StrReverse("坦然面对")
a = "对面然坦"

WeekdayName(weekday, abbreviate, firstdayofweek)
返回一个字符串,表示一星期中的某天。
weekday 必需的。数字值,表示一星期中的某天。该数字值要依赖于firstdayofweek设置中的设置值来决定。 
abbreviate 可选的。Boolean值,表示星期的名称是否被缩写。如果忽略该值,缺省值为False,表明星期的名称不能被缩写。 
firstdayofweek 可选的。数字值,表示一星期中第一天。
firstdayofweek参数值如下:
vbUseSystem 0 使用本国语言支持 (NLS) API设置值。 
vbSunday 1 星期日(缺省)。 
vbMonday 2 星期一 
vbTuesday 3 星期二 
vbWednesday 4 星期三 
vbThursday 5 星期四 
vbFriday 6 星期五 
vbSaturday 7 星期六 
示例
a = WeekdayName(5)
a = "星期四"

下面一堆东西可以解决长度问题~~~

---------------------------------------------------

VB4.0 以后,string 类型以 UNICODE 存放,以 ANSI 形式写入文件。所以,len 和 FileLen 结果不同。len 返回字数,每个中、英文均为 1;lenb 返回字节数,每个中、英文均为 2。 
    
如果需要返回 ANSI 的字节数,可用如下函数:
Public Function LenANSI(strU as string) as long 
      LenANSI = LenB(StrConv(strU, vbFromUnicode)) 
End function 
--------------------------------------------------
在 32-bit 版本的 VB 底下, 将每一个字符都视为两个 Byte, 所以
Len("中英Mixed") 等于 7
LenB("中英Mixed") 等于 14
但是在很多场合底下, 我们希望中文字长度以 2 计算, 英文字母长度以 1 计算, 此时使用的方法如下:
' 欲计算字串 S 的长度
N = 0
For I = 1 To Len(S)
C = Asc(Mid(S, I, 1)) ' 取得第 I 个字符组的字符码
If C >= 0 And C <128 Then ' 英文
N = N + 1
Else ' 中文
N = N + 2
End If
Next
看起来程序有点罗唆, 如果您不喜欢这个方法, 可以使用 Windows API 的 lstrlen 函数, 假设假计算 S 的长度, 则 API 声明式如下:
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
而调用的叙述则是:
n = lstrlen("中英Mixed" + Chr(0))
Print n ' n 将等于 9
请注意调用 lstrlen 时必须加上 Chr(0), 因为此一函数是根据 Chr(0) 来判断字串的结束。
调用 lstrlen 除了程序比较简短之外, 速度也比我们写 VB 程序判断中英文字然后计算长度来的快。

1.        Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long

2.        Private Sub Command1_Click()

3.        MsgBox lstrlen("100个苹果" + Chr(0))

4.        End Sub

复制代码



---------------------------------------------------


有个算中英文混合长度的玩意~~

1.        Private Function prvStringLenth(strString As String) As Long

2.        Dim lngI As Long

3.        Dim lngLenth As Long

4.         

5.        prvStringLenth = 0

6.        lngLenth = 0

7.         

8.        If Len(Trim(strString)) > 0 Then

9.        For lngI = 1 To Len(Trim(strString))

10.     If Asc(Mid(Trim(strString), lngI, 1)) < 0 Then

11.     lngLenth = lngLenth + 2 '如果asc码小于0则为汉字

12.     Else

13.     lngLenth = lngLenth + 1 '大于0则为英文

14.     End If

15.     Next

16.     prvStringLenth = lngLenth

17.     End If

18.      

19.     End Function

复制代码

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页