精华内容
下载资源
问答
  • VB语言写的函数,查找文件中是否存在指定字符串,如果存在则返回该字符串所在的行,不存在则返回空字符串
  • Public Function findstr(ByRef instring As String, after As String, before As String, rewind As Boolean) As String ’instring母,after前面字符,before后面字符,rewind从头开始查找
  • vb6删除字符串里面括号及里面的内容,该代码简练,清晰。
  • 循环查找文本所有指定的一个字符串 VB源码
  • VBA示例之 获取一个字符串中有多少个数字字符,供初学者参考,大牛勿进~~~~~~~
  • VB快速查找大型文件包含的字符串

    千次阅读 2017-08-01 15:07:39
    源代码在查找崩溃问题,欢迎大神指正交流


    关于查找大型文件中包含的字符串,一般都把文件内容读入到内存,然后在内存里进行比较,却不知这种办法有一个致命的弱点,那就是由于大量的内存申请和释放导致的内存颠簸,会使系统性能下降,严重影响了查找的速度。特别是在递归中对多个文件进行查找时,这个问题会更加突出,有时甚至会导致VB程序挂掉。为避免这种情况,同时加快大型文件中字符串的查找速度,俺基于内存影射文件和VB模拟指针技术,编写了一个通用字符串查找函数。

        首先,先看一个普通的查找函数:

    [vb]  view plain  copy
    1. '使用普通方式查找文件中包含的字符串(返回字符位置)  
    2. Private Function FindText(ByVal strFileName As StringByVal strText As StringAs Long  
    3.     Dim fn As Integer  
    4.     Dim strFileText As String  
    5.       
    6.     Dim MyString, MyNumber  
    7.     Dim S As String  
    8.       
    9.     fn = FreeFile()  
    10.     Open strFileName For Binary As #fn   ' 打开输入文件。  
    11.     strFileText = Input(LOF(fn), fn)  
    12.     Close #fn  
    13.     FindText = InStr(strFileText, strText)  
    14. End Function  

        用一个400K的文本进行测试,测试次数为20次,测试代码如下:

    [vb]  view plain  copy
    1. Sub Main()  
    2.     Dim lStartTime As Long  
    3.   
    4.     '比较两个方式的运行速度  
    5.     lStartTime = GetTickCount  
    6.     Call FindText("G:/Inst/小说/沧海凤歌.txt""打打秋风"'此返回值为字符位置  
    7.     Debug.Print GetTickCount - lStartTime  
    8. End Sub  

        根据测试结果,最大耗时为2050ms,最小耗时为890ms,平均在950ms左右。

     

        然后,我看再看一下基于内存影射和模拟指针的查找函数,代码如下:

    [vb]  view plain  copy
    1. Option Explicit  
    2.   
    3. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)  
    4. Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As StringByVal dwDesiredAccess As LongByVal dwShareMode As LongByVal lpSecurityAttributes As LongByVal dwCreationDisposition As LongByVal dwFlagsAndAttributes As LongByVal hTemplateFile As LongAs Long  
    5. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As LongAs Long  
    6. Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As LongAs Long  
    7. Private Const GENERIC_READ = &H80000000  
    8. Private Const GENERIC_WRITE = &H40000000  
    9. Private Const OPEN_EXISTING = 3  
    10. Private Const FILE_SHARE_READ = &H1  
    11. Private Const FILE_SHARE_WRITE = &H2  
    12. Private Const FILE_ATTRIBUTE_NORMAL = &H80  
    13. Private Const FILE_ATTRIBUTE_ARCHIVE = &H20  
    14. Private Const FILE_ATTRIBUTE_READONLY = &H1  
    15. Private Const FILE_ATTRIBUTE_HIDDEN = &H2  
    16. Private Const FILE_ATTRIBUTE_SYSTEM = &H4  
    17.   
    18. Private Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As LongByVal lpFileMappigAttributes As LongByVal flProtect As LongByVal dwMaximumSizeHigh As LongByVal dwMaximumSizeLow As LongByVal lpName As StringAs Long  
    19. Private Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As LongByVal dwDesiredAccess As LongByVal dwFileOffsetHigh As LongByVal dwFileOffsetLow As LongByVal dwNumberOfBytesToMap As LongAs Long  
    20. Private Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long  
    21. Private Const PAGE_READWRITE = &H4  
    22. Private Const FILE_MAP_READ = &H4  
    23.   
    24. Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long  
    25. Private Type SAFEARRAYBOUND  
    26.     cElements As Long  
    27.     lLbound As Long  
    28. End Type  
    29. Private Type SAFEARRAY1D  
    30.     cDims As Integer  
    31.     fFeatures As Integer  
    32.     cbElements As Long  
    33.     clocks As Long  
    34.     pvData As Long  
    35.     rgsabound(0) As SAFEARRAYBOUND  
    36. End Type  
    37.   
    38. '使用内存映射方式查找大型文件中包含的字符串  
    39. Function FindTextInFile(ByVal strFileName As StringByVal strText As StringAs Long  
    40.     Dim hFile As Long, hFileMap As Long  
    41.     Dim nFileSize As Long, lpszFileText As Long, pbFileText() As Byte  
    42.     Dim ppSA As Long, pSA As Long  
    43.     Dim tagNewSA As SAFEARRAY1D, tagOldSA As SAFEARRAY1D  
    44.   
    45.     hFile = CreateFile(strFileName, _  
    46.             GENERIC_READ Or GENERIC_WRITE, _  
    47.             FILE_SHARE_READ Or FILE_SHARE_WRITE, _  
    48.             0, _  
    49.             OPEN_EXISTING, _  
    50.             FILE_ATTRIBUTE_NORMAL Or FILE_ATTRIBUTE_ARCHIVE Or FILE_ATTRIBUTE_READONLY Or _  
    51.             FILE_ATTRIBUTE_HIDDEN Or FILE_ATTRIBUTE_SYSTEM, _  
    52.             0) '打开文件  
    53.     If hFile <> 0 Then  
    54.         nFileSize = GetFileSize(hFile, ByVal 0&) '获得文件大小  
    55.         hFileMap = CreateFileMapping(hFile, 0, PAGE_READWRITE, 0, 0, vbNullString) '创建文件映射对象  
    56.         lpszFileText = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0) '将映射对象映射到进程内部的地址空间  
    57.           
    58.         ReDim pbFileText(0) '初始化数组  
    59.         ppSA = VarPtrArray(pbFileText) '获得指向SAFEARRAY的指针的指针  
    60.         CopyMemory pSA, ByVal ppSA, 4 '获得指向SAFEARRAY的指针  
    61.         CopyMemory tagOldSA, ByVal pSA, Len(tagOldSA) '保存原来的SAFEARRAY成员信息  
    62.         CopyMemory tagNewSA, tagOldSA, Len(tagNewSA) '复制SAFEARRAY成员信息  
    63.         tagNewSA.rgsabound(0).cElements = nFileSize '修改数组元素个数  
    64.         tagNewSA.pvData = lpszFileText '修改数组数据地址  
    65.         CopyMemory ByVal pSA, tagNewSA, Len(tagNewSA) '将映射后的数据地址绑定至数组  
    66.           
    67.         FindTextInFile = InStr(pbFileText, StrConv(strText, vbFromUnicode)) '查找子字符串位置  
    68.           
    69.         CopyMemory ByVal pSA, tagOldSA, Len(tagOldSA) '恢复数组的SAFEARRAY结构成员信息  
    70.         Erase pbFileText '删除数组  
    71.           
    72.         UnmapViewOfFile lpszFileText '取消地址映射  
    73.         CloseHandle hFileMap '关闭文件映射对象的句柄  
    74.     End If  
    75.     CloseHandle hFile '关闭文件  
    76. End Function  

        这个函数明显比上一个函数复杂得到,按理说,它运行速度肯定相应的要慢一些,咱们先不下定论,还是经过测试后再说吧,测试代码如下:

        调用代码如下:

    [vb]  view plain  copy
    1. Sub Main()  
    2.     lStartTime = GetTickCount  
    3.     Call FindTextInFile("G:/Inst/小说/沧海凤歌.txt""打打秋风"'此返回值为字节位置  
    4.     Debug.Print GetTickCount - lStartTime  
    5. End Sub  

        使用了同一个文本文件,同样测试了20次,嘿,第二个函数最大耗时为17ms,最小耗时为0ms,平均不超过1ms,这进一步验证了我的设计初衷。

        如果你有更好的思路和建议,恳请告诉俺,俺在此表示感谢了!


    原文链接 :http://blog.csdn.net/lyserver/article/details/4106290

    展开全文
  • 客户要求,写了个简单的VB小脚本,之前没有学过,现学现用的,适合入门级别,不想浪费下载积分的可以去我博客里拷贝源码
  • 这个函数是用某个字符把一个字符串分割成数组。比如“123123123”用‘3’作为分隔符,就会得到“12“, “12“, “12“, “”共4个元素,然后元素个数和分隔符的出现次数是一一对应的。就可以写出下面的代码: ...

    split方法

    这个函数是用某个字符把一个字符串分割成数组。比如“123123123”用‘3’作为分隔符,就会得到“12“, “12“, “12“, “”共4个元素,然后元素个数和分隔符的出现次数是一一对应的。就可以写出下面的代码:

    Dim s As String
    s = "1.56.4324.5.."
    Dim arr
    arr = Split(s, ".")
    Print s & "中共有" & UBound(arr) - LBound(arr) & "个 ."
    

    写成函数的形式就是:

    '第一个参数是主字符串,然后求char在主字符串中出现的次数(函数返回值)。
    Function countChar(s As String, char As String) As Integer
    Dim arr
    arr = Split(s, char)
    countChar = UBound(arr) - LBound(arr)
    End Function

    遍历查找方法

    这个思路很简单,就是遍历字符串所有的字符,查找和所求字符相同的次数。关键在于mid函数的使用。

    '第一个参数是主字符串,然后求char在主字符串中出现的次数(函数返回值)。
    Function countChar(s As String, char As String) As Integer
    Dim length As Integer
    length = Len(s)
    Dim i As Integer
    Dim count As Integer, c As String
    For i = 1 To length '遍历字符串
        c = Mid(s, i, 1) '取子串.参数分别是(字符串,起始位置,截取长度)
        If c = char Then count = count + 1 '如果查找到了,计数器就+1
    
    Next
    countChar = count
    End Function

    调用方法

    举例:

    Dim s As String, c As String
    s = "1.56.4324.5.."
    c = "."
    
    Print s & "中共有" & countChar(s, c) & "个 ."

    https://www.bilibili.com/read/cv1392104

    展开全文
  • 全部代码:Module Module1 Sub Main() Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 方法1") Dim str = "7f 7f 00 00 ad 00 00 00 00 00 0d 0a 00 00 00 ad" Dim adCount =

    全部代码:

    
    ```vbnet
    Module Module1
    
        Sub Main()
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 方法1")
            Dim str = "7f 7f 00 00 ad 00 00 00 00 00 0d 0a 00 00 00 ad"
            Dim adCount = UBound(Split(str, "ad"))
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} ad的个数:{adCount}")
    
            For Each ad In Split(str, "ad")
                Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 用ad分割出来的结果分别是:{ad}")
            Next
    
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 方法2")
            Dim adQuery = From ad In Split(str, " ")
                          Where ad.ToLowerInvariant() = "ad".ToLowerInvariant()
                          Select ad
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} ad的个数:{adQuery.Count}")
    
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 方法3")
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} ad的个数:{Split(str, " ").Count(Function(ad) ad = "ad")}")
        End Sub
    
    End Module
    
    效果:
    ![执行结果](https://img-blog.csdnimg.cn/img_convert/7da5a7ee86773119a5fcd16d8bf1225d.png)
    
    展开全文
  • MatchCase, , , , , , wdFindContinue, , ReplaceString, True) ' 查找并替换 ' 判断查找并替换是否成功 , 如果成功替换次数值递增 1 If ReplaceSign = True Then I = I + 1 End If Loop MsgBox " 已...

    基本要求:需安装

    WORD

    Function WordReplace(FileName As String, SearchString As String, ReplaceString As

    String, Optional

    SaveFile As String

    = "", Optional MatchCase As

    Boolean = False) As

    Integer

    On Error GoTo ErrorMsg '

    函数运行时发生遇外或错误

    ,

    转向错误提示信息

    Dim wordApp As New Word.Application

    Dim wordDoc As New Word.Document

    Dim wordArange As Word.Range

    Dim wordSelection As Word.Selection

    Dim ReplaceSign As Boolean

    Dim I As Integer

    '

    判断将要替换的文件是否存在

    If Dir(FileName) = "" Then

    '

    替换文件不存在

    MsgBox "

    未找到

    " amp; FileName amp; "

    文件

    " '

    提示替换文件不存在信息

    WordReplace = -2 '

    返回替换文件不存在的值

    Exit Function '

    退出函数

    End If

    Set wordApp = CreateObject("Word.Application") '

    建立

    WORD

    实例

    wordApp.Visible = False '

    屏蔽

    WORD

    实例窗体

    Set wordDoc = wordApp.Documents.Open(FileName) '

    打开文件并赋予文件实例

    Set wordSelection = wordApp.Selection '

    定位文件实例

    Set wordArange = wordApp.ActiveDocument.Range(0, 1) '

    指定文件编辑位置

    wordArange.Select '

    激活编辑位置

    I = 0 '

    初始化替换次数值

    ReplaceSign = True '

    初始化是否替换成功标志

    Do While ReplaceSign

    ReplaceSign

    =

    wordArange.Find.Execute(SearchString,

    MatchCase,

    ,

    ,

    ,

    ,

    ,

    wdFindContinue, , ReplaceString, True) '

    查找并替换

    '

    判断查找并替换是否成功

    ,

    如果成功替换次数值递增

    1

    If ReplaceSign = True Then

    I = I + 1

    End If

    Loop

    MsgBox "

    已完成对文档的搜索并完成

    " amp; I amp; "

    替换。

    " '

    提示总替换次数

    '

    如果替换成功,则提示是否保存

    展开全文
  • MatchCase, , , , , , wdFindContinue, , ReplaceString, True) ' 查找并替换 ' 判断查找并替换是否成功 , 如果成功替换次数值递增 1 If ReplaceSign = True Then I = I + 1 End If Loop MsgBox " 已...
  • 为了模拟后瞻,我想,要不就用笨方法,先将前后缀字符串一同提取,然后再讲前后缀字符串一同replace为空字符串。于是就了下面这个简单的方法,但确实很实用: 示例代码如下 // 提取固定字符之间的字符串 function...
  • VB字符串处理大全

    万次阅读 2018-09-16 11:56:53
    1 VBA的字符串 2 VBA处理字符串的函数  2.1 比较字符串 ... 2.6 查找字符串  2.7 提取字符/字符串  2.8 删除空格  2.9 返回字符代码  2.10 返回数值代表的相应字符  2.11 使用字节的函数  ...
  • 如果要统计一段字符串中字符串的出现次数, 如需要统计字符串"niger shi shen me?shi heiren de chenghu!wo jiu shi xihua ba heiren jiaozuo niger" "niger"的出现次数,可以参考如下代码,以下代码用VB实现 ...
  • VB常用字符串函数

    千次阅读 2015-02-27 09:27:30
    P=Asc(X) 返回字符串X的第一个字符的字符码  P=Chr(X) 返回字符码等于X的字符  [范例]:  (1)P=Chr(65)  ‘ 输出字符A,因为A的ASCII码等于65  (2)P=Asc(“A”)  ‘ 输出65  2. Len(X): 计算...
  • 项目中涉及到一个需要检测路径中是否含有 ECE 开头的文件名的文件是否存在 文件基本是以 ECE-1.txt 这样的形式命名的 这里不能使用io.file.exists(" ")的方法来实现 这里给出解决方案 d = Dir("d:\ECE*.txt") If d...
  • 头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (const char *str, int c);【参数】str 为要查找字符串,c 为要查找的字符。strchr() 将会找出 str 字符串中第一次...
  • 找出字符串中 指定字符的索引

    千次阅读 2019-11-08 20:19:12
    <script> var str = "Loerm opsum ipsef hello world trea"; var arr = []; var pos = str.indexOf("e"); while(pos > -1) { // 判断pos大于负一 说明此字符串中一定...
  • VB字符串处理函数一览

    万次阅读 2017-10-10 11:49:20
    VB字符串处理函数一览 ...mid(字符串,从第几个开始,长度) ByRef...instr(从第几个开始,字符串1,字符串2) ByVal 从规定的位置开始查找,返回字符串2在字符串1的位置  例如 instr(1,"小欣无敌","小") 则返
  • 具体原理和“查找某个字符或字符段在字符串中出现的次数”一样 /** * 查找某个字符在字符串中出现的位置信息 * * @param str 待被查找字符串 * @param need 待查找的字符 * @return 位置信息的一个二维数组 ...
  • 判断字符串中是否含有某个字符

    千次阅读 2012-12-03 10:49:25
    可以用来判断字符串中是否含有某个字符串。或者用来判断某个字符在字符串中出现的位置。 下面是一个判断字符串中是否含有逗号(,)的例子。 Sub test()  Dim tcolor As String  tcolor = "149 127"  Dim aa...
  • sql语句中,以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素,例如:判断 ,a,b,c,d,e,f,g,中是否包含 a ,sql语句如何实现? SQL中没有类似VB中的Split的函数。此时,如要...
  • Dim str As String = "what is your name.my name is liu"  TextBox1.Text = CStr((str.Split("s").Length - 1))
  • VB中字符串匹配的多种方式

    千次阅读 2012-06-13 09:11:55
    这段时间在移植项目的过程中,起初我想判断一个字符串中是否存在某字符(串),直接的使用方法是用instr(start,string1,string2,VB compare),但经过分析在VB中可以只用一下方法来判断! 1.常用的 InStr 方法 ...
  • 返回包含于字符串内的数字,字符串中是一个适当类型的数值。 语法 Val(string) 必要的 string 参数可以是任何有效的字符串表达式. 说明 Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。...
  • vb 字符串截取 资料 搜集

    千次阅读 2017-01-18 19:58:55
    1. ASC(X),Chr(X):转换字符字符码 [格式]:  P=Asc(X) 返回字符串X的第一个字符的字符码  ...空字符串长度为0,空格符也算一个字符,一个文字虽然占用2 Bytes,但也算一个字符。 [范例]:  (1) 令X=”” (空
  • vb中 dim a# 定义a变量为双精度型变量~ #是类型符 % 整型 & 长整型 !单精度 $ 字符型 VB中strconv 的作用 StrConv("要转换的字符串",转换类型)转换...vbProperCase 3 将字符串中每个字的开头字母转...
  • 按F1获取帮助,你会了吗?... 字符串(System.String类)是 Unicode 字符的有序集合,用于表示文本,即一系列 ...不同于旧的VB6.0,System.String类使用方法而不是函数来处理字符串。当然,为了兼容老版本的VB6.0,...
  • 在主函数输入字符串指定字符,调用函数完成相应功能后在主函数输出结果。 【输入输出示例】 I am a student.I am learning program c. ↙ I↙ str= am a student. am learning program c. */ #include <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,653
精华内容 4,261
关键字:

vb查找字符串中是否有指定字符