精华内容
下载资源
问答
  • VB学习笔记——Len函数和LenB函数

    万次阅读 2015-03-03 10:31:54
    LENB返回文本串所有字符的字节数    语法:LEN(text)或LENB(text)    注意:此函数用于双字节字符,且空格也将作为字符进行统计。    实例:如果A1=我爱编程,则公式“=LEN(A1)”返回4,=LENB(A1)返回8。 ...
    Len函数和LenB函数:
    
      
        用途:LEN返回文本串的字符数。LENB返回文本串中所有字符的字节数
      
        语法:LEN(text)或LENB(text)
      
        注意:此函数用于双字节字符,且空格也将作为字符进行统计。
      

        实例1:如果A1=我爱编程,则公式“=LEN(A1)”返回4,=LENB(A1)返回8。

    实例2:

    Type CustomerRecord      ' 定义用户自定义的数据类型。
        ID As Integer                 ' 将此定义放在常规模块中。
        Name As String * 10
        Address As String * 30
    End Type

    Dim Customer As CustomerRecord   ' 声明变量。
    Dim MyInt As Integer, MyCur As Currency
    Dim MyString, MyLen
    MyString = "Hello World"   ' 设置变量初值。
    MyLen = Len(MyInt)   ' 返回 2。
    MyLen = Len(Customer)   ' 返回 42。
    MyLen = Len(MyString)   ' 返回 11。
    MyLen = Len(MyCur)   ' 返回 8。


    		当启用支持 DBCS 的语言的编辑并将其设置为默认语言时,函数 LENB 会将每个双字节字符按 2 计数,否则,函数 LENB 会将每个字符按 1 计数。

    展开全文
  • Len方法判断字符串变量的长度(VB6.0代码编写) Len方法判断字符串变量的长度 QQ223857666勾月
  • vb len("中文")的位数计算的解决方法

    千次阅读 2008-04-22 14:01:00
    通常VB中len("中文"),返回的是2,因为vb计算的是Unicode的字符个数,所以每个汉字(日文、韩文)算作一个字符,但是如果我们不想计算Unicode的个数,而是要将汉字当作2位时,怎么办?可以用如下的函数实现: ...

    PS:对于pan05、black205两位提出的部份中文还是计算为1位的问题,已修改,感谢两位。

    通常VB中的len("中文"),返回的是2,因为vb计算的是Unicode的字符个数,所以每个汉字(日文、韩文)算作一个字符,但是如果我们不想计算Unicode的个数,而是要将汉字当作2位时,怎么办?

    可以用如下的函数实现:

     

    Private   Function  LenC(s  As   String As   Integer
    Dim  n  As   Integer
    LenC 
    =   0
    For  n  =   1   To   Len (s)
        
    If  (AscW( Mid (s, n,  1 ))  >   256 Or  (AscW( Mid (s, n,  1 ))  <   0 Then
            LenC 
    =  LenC  +   2
        
    Else
            LenC 
    =  LenC  +   1
        
    End   If
    Next  n
    End Function

    Private   Sub  Command1_Click()
    Print  LenC( " AAA-中文自选 " )
    End Sub

     

     

     

    展开全文
  • VB中Trim()函数怎么使用

    千次阅读 2019-12-06 20:41:58
    Trim () 函数 VB中的Trim()函数表示清除字符串前后的空格不包括中间的空格 Trim(string)去除前后空格 LTrim(string) 去除前面空格 RTrim(string) 去除后面空格

    Trim () 函数

    VB中的Trim()函数表示清除字符串前后的空格不包括中间的空格

    Trim(string)去除前后空格
    LTrim(string) 去除前面空格
    RTrim(string) 去除后面空格

    展开全文
  • 程序定义了一个数组Xstr(1),Xstr(0)="a",Xstr(1)="b",当我如此调用时Len(Xstr)编译器提示有错通过查阅MSDN关于Len参数的是这样说的“企图使用数值表达式来当作 Len 函数的参数。”我想问的是我的Xstr也不是一个...
  • Len方法判断字符串变量的长度(VB6.0源代码编写)Dim a As String a = Text1.Text LSet a = "1234" Label1.Caption = "你的字符串变量长度是:" & Len(a) & "个字符
  • VB中String的用法及原理

    千次阅读 2018-08-24 12:43:00
    各种不同开发语言,字符串类型显然是最常见,也是最常用的。常用代表它最易用,是这样吗?未必,越简单,越普通,你会忽视,内里隐藏着的陷井更容易使你中招。它往往是绊脚石,或者程序性能的瓶颈。本身,我对VB...

    在各种不同开发语言中,字符串类型显然是最常见,也是最常用的。 
        常用代表它最易用,是这样吗?未必,越简单,越普通,你会忽视,内里隐藏着的陷井更容易使你中招。它往往是绊脚石,或者程序中性能的瓶颈。 
        本身,我对VB语言及相关应用并不太熟,只不过近期编码用到,有些体会。

    一: 先来总结一下,常用编程语言的字串表达方式: 
    C:      char(wchat_t) * 或 []:  字符数组来表示字符串,以0结尾,无长度标识。
              配一堆操作函数,不好记,不好用。 
    C++:  std::string  basic_string<>的特化版本. 注意:其内在的数据区由默认的内存管理器分配。
             对象哈,提供还算好用的方法。 
    MFC: CString 标准的C++类. 数据项:LPTSTR 一堆可用的方法。 
    Windows普通API DLL:       LPTSTR 采用C标准的0结束字串 
    Windows扩展COM中:         BSTR  OLE标准, 头上带长度标识的字符串. 
    Java中:                            ;" /> VB中:                              String   实际上就是OLE标准的BSTR 
    好了,我们关心的是BSTR。 
    看看BSTR到底是什么东东。
    1.0:看看在Windows SDK中的定义:
    typedef OLECHAR* BSTR;
    typedef WCHAR OLECHAR;
    typedef wchar_t WCHAR;
    所以,它实际上是宽字符指针。

    1.1:它的内存结构呢?很容易查到资料。
    前置四字节,内置字串的长度,后面是字串内容,原则上并不以'/0'结尾,长度由前置值决定。
    所以,它又不简简单单就是宽字符指针。但从基本类型定义上来看,它与宽字符指针是可以划等号的。

    1.2:那VB中的String也就明白了。实际上是地址,是字串的首地址(注意:不是长度的首地址) 
    另外,String是可以装载中间带'/0'字符的字串的,只不过,一些显示函数可能将其省略。
    如:dim str as string
         str = "ab" & chr(0) & "cd"
         MsgBox str   '输出:ab
         Debug.Print str '输出 ab cd

    1.3:可以看出,它很特珠,Windows提供几个函数,用来分配和释放它。
    分配:SysAllocStringLen      SysAllocString
    释放:SysFreeString
    取长度:SysStringLen
    注意:分配得到的BSTR,实际上仍然是以'/0'结尾。SysStringLen似乎有点儿英雄无用武之地,呵。
    比如:SysAllocStringLen 的说明文档:
    Allocates a new string, copies cch characters from the passed string into it, and then appends a null character.
    比如:SysAllocString,我们可以通过例子:
     BSTR bstrVal = ::SysAllocString(L"abcd");
     for(int n=0;n<::SysStringLen(bstrVal)+1;n++)
     {
      TRACE(_T("/n%d"),*(bstrVal+n));
     }
     ::SysFreeString(bstrVal);
    输出:
    97
    98
    99
    100
    0
    仍然有0。

    1.4:VC中的用法:
    无论用MFC,还是ATL,实际上,由于BSTR并不是基本类型,而它的相关操作函数也是沿用的以'/0'结尾的函数,所以,虽然它在字串中可以带'/0',但实际上,经过相关操作后,'/0'后的内容会丢掉,这要小心。比如,我们看看CString的构造:
    CString::CString(LPCWSTR lpsz)
    {
     Init();
     int nSrcLen = lpsz != NULL ? wcslen(lpsz) : 0;
     if (nSrcLen != 0)
     {
      AllocBuffer(nSrcLen*2);
      _wcstombsz(m_pchData, lpsz, (nSrcLen*2)+1);
      ReleaseBuffer();
     }
    }

    小结:BSTR有长度标识,但是MS在实现时,为了兼容以前的字串操作,再加上BSTR并不是基本类型,所以,它的分配函数和一些操作函数都是把它当作'/0'结尾来处理。千万要注意。最好也不要用它来装载中间带'/0'的字串,因为,说不定什么时候,它就丢掉了。

    二:  VBr的应用中将麻烦的地方,应该集中在以下几个方面: 
    2.1: VB调用Windows API DLL
     
    2.1.1: 字串作为输入参数 
       这还用说吗? 
       在API中如果是LPTSTR,在VB中直接转为Byval s as String 
       原因?  为什么 BSTR可以直接转为 LPTSTR ? 
       前面其实已经讲了,再说一次吧。 
       BSTR实际上是指针,指向字串头.所以,采用ByVal指向的刚好是字串的首地址,也就是LPSTR,嘿嘿,刚刚好,符合需要,真是巧啊。 

    2.1.2: 字串作为输出参数 
    这个麻烦一点,举个例子吧. 
    如: 
        UINT GetWindowsDirectory( 
          LPTSTR lpBuffer, 
          UINT uSize 
       ); 
    使用API Viewer得到声明 
       Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _ 
          (ByVal lpBuffer As String, ByVal nSize As Long) As Long 
    代码: 
        Dim sTemp As String * MAX_PATH 
        Dim lsize As Long 
        Dim str As String 
        lsize = GetWindowsDirectory(sTemp, MAX_PATH) 
        str = Left(sTemp, lsize) 
        MsgBox "Windows路径:" & str & "长度:" & Len(str) 
    注意一下: 
    A: 引用的Windows API是A版,而不是W版,如果是W版会有错误. 
    原因,我的猜测是:   VB的API调用机制中,字串强制做了UNICODE到ANSI的转换.API的DLL没法告知调 
    用端,它是Unicode版还是ANSI版.如果是OCX或COM就没问题了,因为它们有标识。没办法,只能用一种了, MS选了A版。 
    B: 参数是ByVal 
    道理同作为输入时,实际上传的指针,所以,指向的内容是可以修改地,也就可以返回了。 
    C: 根据API的使用说明,可得到 
    [out] Pointer to the buffer to receive the null-terminated string containing the path. 
    需要调用方分配空间,因此, sTemp需要给足够长度的空间. 
    D: 返回的0结尾的字串,可以用left达到目的. 
    因为:VB的String对应的是BSTR类型,长度由前置字节决定,而不是0字符决定. 

    2.1.3: 字串作为Return值 
    这种API是不是存在呢?系统级的没看见,一般不会这样用,因为这存在内存分配的问题. 
    但我自已好像写过,处理方式是: 
    VB声明中可以使用long返回,然后用lstrcpy进行转换, 
    说起lStrCpy就不得不说说它的作用了,它实在是很关键,它很神奇,它可以把 
    地址指向的字符串拿出来。 
    我们来看看原理: 
    lStrcpy本身只是简单的复制字符串的函数: 
    Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long 如果按照API View中的声明,是不行的.它确实就是字串拷字串,没办法把字址指向的字串拷到另一串. 
       好了,需要小小改动一下: 
       首先:目的地没错,确实应该是指向字串的首地址.用Byval String就可以.第一个参数OK。 
       源串呢? 因为你传入的实际上不是String,而是long啊(上例返回的是long噢),那当然应该将声明改成long,否则,传入的String会变成啥,啥都不是呢?就这么简单。 

    2.1.4: LPTSTR 都可以用VB的byval String替代吗? 
    如果在结构体里,可就不是这样了.
    如:EnumForms  枚举某个打印机的所有打印纸型。 
    Public Declare Function EnumForms Lib "winspool.drv" Alias "EnumFormsA" (ByVal hPrinter As Long, _ ByVal Level As Long, ByRef pForm As FORM_INFO_1, ByVal cbBuf As Long, ByRef pcbNeeded As Long, _ 
     ByRef pcReturned As Long) As Long 
    对于 FORM_INFO_1的定义: 
    Public Type FORM_INFO_1 
            Flags As Long 
            pName As String 
            Size As SIZEL 
            ImageableArea As RECTL 
    End Type 
        如果按上述的方法调用,会出现异常.估计是在拷贝数据时,String实际上是不同于LPTSTR的,因为它的前面还有四字节是标识长度的,如果定义为String,那在构造pName之前的长度,必将动到它不应该动到的地方,这样,就错了.想来不会异常退出的,但却退出了,不知原因(我没弄明白) 

      所以,此种情况,应该将pName变为long,然后再用2.1.3提到的方法,将字串拷贝出来使用. 
             这样,就OK了。 

    引申一下: 
        对于一些API中大的结构体中的指针类型,我们完全可以用long来取代它,然后传递0&,因为,大多数情况,我们是不需要传入任何参数的,避免定义很多我们并不需要的类型.这样就降低了API使用的复杂性。 

    2.2 : VB调用COM组件(或OCX控件) 
    这似乎没啥可说的,COM组件的接口一般都是标准的BSTR,与VB的String完全兼容. 
    VB调用端没啥问题,倒是书写COM的程序需要注意: 
    2.2.1: 应用端可能会传入空指针.比如传入vbNullString,这需要留意. 
    2.2.2: BSTR的释放与普通LPTSTR可不同,使用前需要初始化,使用后要释放,当然,VB无此烦恼. 

    3: VB字串的连接操作. 
        当我们要序列化生成文本文件时,大都喜欢先将内容写入字串,然后再一次写了文件.否则多次写入文件,似乎有效率低之嫌,但如果字串为多次累加而成,那么使用VB字串的连接操作,将是效率极差的做法,这也变成性能低下的重要原因. 
        分析一下原因: 
        对于String的连接,系统的做法一定是重分配空间,搬移到新空间,拷贝进新内容.如果连接次数较多,且较细,那将是灾难性的。(类似MFC的CString的做法,假设我们要写一个100K长度的字串,但每次添加一个字符,那你可以试试它的速度) 
       如何解决? 
       很简单,采用预分配内存块, 当内存块不够用时,自动增加指定块的增量(当然每次增长的内存块这个阀值需要慎重考虑) 
       这样,减少搬移操作,效率自然提升。 
       具体实现:可以使用内存操作API实现.VB会麻烦一点(需要用API生成全局内存,自行完成搬移,拷贝), 
    VC可以直接使用CMemFile简单搞定. 

    4: VB字串多语言化 
    4.1: 一般的做法是: 将原生串与多语言串做成Key.Value Pair结构。多语言信息为Value,然后做一个简单的Hashc ode来索引,或者干脆用Hash Map来实现 (为了更高效,更容易使用已有容器,最好借助于C++编写相关支持)。
    4.2: 为了使UI上的字串也能多语言化,需要保证字串信息为动态加载。 
    4.3: 对于控件的字体编码字符集也需要处理,以保证正确显示

    转载于:https://www.cnblogs.com/forever5325/p/9529135.html

    展开全文
  • VB中对EXCEL的各种操作

    万次阅读 多人点赞 2017-02-08 15:20:15
     objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄第一个之后  objExl.Sheets(objExl.Sheets.Count).Name = "book2"  objExl.Sheets.Add , objExl.Sheets("book2") '增加第三...
  • Private Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hwnd As Long... RichTextBox1.Text = Left(RichTextBox1.Text, Len(RichTextBox1.Text) - 1) + vbCrLf Next Next End Sub
  • VB 汉字字符串的截取LEN、LEFT、RIGHT

    千次阅读 2009-07-26 23:51:00
    如果是汉字+数字或字母的字符串,往往截取到的字符串长度不是理想的,其中涉及到的函数有LEN、LEFT、RIGHT我自己编写了如下3个函数,用来取代 len()、left()、right(),希望能解决您的问题。---------------------...
  • 考试成绩多级别判断,这个可嵌入到一个完整的学生考试成绩管理系统,用来判断学生考试成绩属于哪一个级别。比如输入一个成绩,判断该成绩是及格、不及格、或优秀等级别。... Text1.SelLength = Len(Text1)  End Sub
  • VB枚举网络的服务器会话: For cnt = 0 To dwEntriesread - 1 将数据转换为SESSION_INFO_502 type类型,并将其添加到列表 CopyMemory si502, ByVal bufptr (nStructSize * cnt), nStructSize sesi502_cname ...
  • Option Explicit Private Sub Command1_Click() ... Dim Num, I, J, Temp, Len1 As Long Dim FileNO As Long Dim Count As Long Dim str, strTemp, strArr() As String, Arr() As String ...
  • 在VB6内存创建bitmap图像,并将其保存为byte()数组 项目添加一个模块,用于封装GDIPlus函数 从内存创建相应的信息 '全局声明 Dim token As Long Dim graphics As Long Dim img As Long, W As Long, H As ...
  • 怎么用vb语言的mid函数怎么从字符串截取不知道长度的一个数字呢?怎么用mid函数来截取这个字符串的数字?
  • 将图片存入数据库的方法演示,... If Len(CmD1.FileName) Then  Text1(2).Text = CmD1.FileName  Image1.Picture = LoadPicture(Text1(2).Text)  Image2.Picture = LoadPicture(Text1(2).Text)  End If  End Sub
  • 不能使用VB中的关键字(语句名、函数名等),即不能关键字同名(例如End、Len、Sub等)。 4.VB中不区分变量名的大小写。 5.为了增加程序的可读性,可变量名前加一个缩写的前缀来表明该变量的数据类型。 二、VB中的...
  • VB版 HTML服务器,用于解析HTML文件,不能解析动态脚本比如ASP/PHP等,通过菜单提供的功能... uTimeoutOrVersion As Long \'由于VB中没有Union类型,只能用Long型代替  szInfoTitle As String * 64 \'Tip文本的标题
  • 在VB中使用inet控件

    千次阅读 2013-06-24 13:52:39
    利用这个控件可以完成许多功能。我们通过例子来看看。...form添加2个按钮,2个文本框和Inet控件代码如下: Option Explicit'这段代码使用了GetHeader来返回页面信息,比较准确一些'可以得到文件最后修改日
  • VB清除中文字符

    2018-08-22 11:14:48
    Private Sub Command1_Click() Dim s As String s = "...For i = 1 To Len(Text1.Text) If Asc(Mid(Text1.Text, i, 1)) &gt; 0 Then s = s + Mid(Text1.Text, i, 1) Next i Text1.Text = s End Sub
  • VB6简单文件与文件夹操作

    千次阅读 2018-01-29 21:45:20
    Macintosh(Mac OS) 可用 On Error Resume Next If Right(PathFile, 1 ) = "\" Then PathFile = Left(PathFile, Len(PathFile) - 1 ) If Len(Dir(PathFile, vbReadOnly Or vbHidden ...
  • 搞了三个月的VB.net,介绍一下我的环境吧,用的VS2008编译器,运行坏境是WINCE7.0系统,不要问我为什么不选更优的编译器,这是公司比较老的一款产品,但是也需要维护的,所以。。。。。 大体说说身为菜鸟的我的学习...
  • [编程语言][汇编语言]计算机与汇编语言

    千次阅读 多人点赞 2015-11-30 18:47:31
    工程师决定CPU内部内置一些寄存器来完成CPU的运算功能,同时CPU也需要内存保存其运算结果。 这里我们总结一下:计算机的运算功能是依靠CPU完成的;运算过程要CPU要用到其内部的寄存器;而当寄存器...
  • 动态链接库(dll)的好处就不多说了,这里就把如何在VB中调用VC写的dll函数的方法介绍一下,供有需要的朋友们参考,同时也免得自己以后忘了。 初次接触DLL的用户经常会遇到一个问题:VC环境下创建的DLL,VC里...
  • VB一些常用控件集,以及一些方法模块,编辑框.ctl、进度条、全局热键钩子、网站...现在我们的dll文件就notepad程序运行了 ‘dll被注入notepad.exe以后会主动弹出对话框显示出notepad.exe的进程ID,表明注入成功.
  • VB编程:获取字符串数字个数-50

    千次阅读 2017-02-06 09:59:38
    程序代码: Private Sub Form_Click()  Dim i As Integer, j As Integer  j = 0  ‘ 计数  Dim str As String  str = "abcs123"  For i = 1 To Len(str)  ...
  • Vb中VSFlexGrid控件的应用

    千次阅读 2015-03-10 18:15:48
    Align 对象窗体上的显示位置 O.A = 0|1|2|3|4 AllowBigSelection 设定列头是否整行或整列选择 O.A = True|False  AllowSelection 是否可多单元选择 O.A = True|False  AllowUserFreezing 运行...
  • Java输入输出流

    千次阅读 多人点赞 2017-02-18 17:07:20
    此外,Java也对块传输提供支持,核心库 java.nio采用的便是块IO。  流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。      Java IO模型 :  Java的IO模型设计非常优秀,它使用...
  •  检查一个字符串是否为合法的VB变量名,就是说,开头是一个字母,接着跟随字母或数字符:  If VarName like "[A-Za-z]*" And Not Mid$(VarName, 2) Like "*[!A-Z_a-z0-9]*" Then Print "OK"    检查字符串...
  • VB.net(VB6)String类型、中文、日文与Unicode互相转换 ***需要引用正则表达式 Imports System.Text.RegularExpressions ①将unicode转成中文,如:ABC \u8033\u9EA6 12345,转后为:ABC 耳麦 12345 '将unicode转...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,142
精华内容 6,056
关键字:

在vb中len