前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在VB中遍历文件并用正则表达式完成复制及vb实现重命名、拷贝文件夹的方法

在VB中遍历文件并用正则表达式完成复制及vb实现重命名、拷贝文件夹的方法

原创
作者头像
大师级码师
发布于 2022-11-06 11:10:16
发布于 2022-11-06 11:10:16
1.4K0
举报
文章被收录于专栏:大师级码师大师级码师

先看下在VB中遍历文件并用正则表达式完成复制功能

将"E:\my\汇报\成绩"路径下源文件中的“1项目”,“一项目”等文件复制到目标文件下。以下为实现方式。

Private Sub Option1_Click()

Dim myStr As String

'通过在单元格中输入项目序号,目前采用的InputBox方式指定的,也可通过此方式。二者取其一。

'myStr = Sheets(“Sheet1”).Range(“D21”).Text

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'通过InputBox输入项目序号Start

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

myStr = InputBox("请输入项目序号,序号要为阿拉伯数字。格式一定要正确!格式如" & Chr(34) & "2项目" & Chr(34))

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'通过InputBox输入项目序号End

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim endNum As Integer 'MID函数截取结束位数

endNum = InStrRev(myStr, "项")

myStr = Mid(myStr, 1, endNum - 1)

'MsgBox myStr

Dim CChinesStr As String

CChineseStr = CChinese(myStr) '将阿拉伯数字转为汉字

'MsgBox CChineseStr

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'遍历路径下的文件Start

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim fso As Object

Dim folder As Object

Dim subfolder As Object

Dim file As Object

Dim fileNameArray As String

Dim basePath As String

basePath = "E:\my\汇报\成绩"

Set fso = CreateObject("scripting.filesystemobject") '创建FSO对象

Set folder = fso.getfolder(basePath & "\源文件")

For Each file In folder.Files '遍历根文件夹下的文件

'fileNameArray = fileNameArray & file & "|"

Dim mRegExp As Object '正则表达式对象

Dim mMatches As Object '匹配字符串集合对象

Dim mMatch As Object '匹配字符串

Set mRegExp = CreateObject("Vbscript.Regexp")

With mRegExp

.Global = True 'True表示匹配所有, False表示仅匹配第一个符合项

.IgnoreCase = True 'True表示不区分大小写, False表示区分大小写

'.Pattern = "([0-9])?[.]([0-9])+|([0-9])+" '匹配字符模式

'.Pattern = "((([0-9]+)?)|(([一二三四五六七八九十]+)?))项目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式

'.Pattern = "(项目(二百三十四)+)|(((234)?|(二百三十四)?)项目(234)?)" '匹配字符模式

'.Pattern = "(((" & "+)?)|(([一二三四五六七八九十]+)?))项目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式

.Pattern = "(项目(" & CChineseStr & ")+)|(((" & myStr & ")?|(" & CChineseStr & ")?)项目(" & myStr & ")?)" '匹配字符模式

'Set mMatches = .Execute(Sheets("上报").Range("D21").Text) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空

Set mMatches = .Execute(file) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空

For Each mMatch In mMatches

'SumValueInText = SumValueInText + CDbl(mMatch.Value)

'SumValueInText = SumValueInText & mMatch.Value

If mMatch.Value <> "" Then

'fileNameArray = fileNameArray & mMatch.Value & "_"

fso.copyfile basePath & "\源文件\" & mMatch.Value & ".*", basePath & "\目标文件" & myStr '复制操作

End If

Next

End With

'MsgBox fileNameArray

Set mRegExp = Nothing

Set mMatches = Nothing

Next

Set fso = Nothing

Set folder = Nothing

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'遍历路径下的文件End

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

MsgBox "操作完成"

End Sub

'将阿拉伯数字转为汉字

Private Function CChinese(StrEng As String) As String

'验证数据

If Not IsNumeric(StrEng) Then

If Trim(StrEng) <> “” Then MsgBox “无效的数字”

CChinese = “”

Exit Function

End If

'定义变量

Dim intLen As Integer, intCounter As Integer

Dim strCh As String, strTempCh As String

Dim strSeqCh1 As String, strSeqCh2 As String

Dim strEng2Ch As String

'strEng2Ch = “零壹贰叁肆伍陆柒捌玖”

strEng2Ch = “零一二三四五六七八九十”

'strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"

strSeqCh1 = " 十百千 十百千 十百千 十百千"

strSeqCh2 = " 万亿兆"

'转换为表示数值的字符串

StrEng = CStr(CDec(StrEng))

'记录数字的长度

intLen = Len(StrEng)

'转换为汉字

For intCounter = 1 To intLen

'返回数字对应的汉字

strTempCh = Mid(strEng2Ch, Mid(StrEng, intCounter, 1) + 1, 1)

'若某位是零

If strTempCh = “零” And intLen <> 1 Then

'若后一个也是零,或零出现在倒数第1、5、9、13等位,则不显示汉字“零”

If Mid(StrEng, intCounter + 1, 1) = “0” Or (intLen - intCounter + 1) Mod 4 = 1 Then strTempCh = “”

Else

strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))

End If

'对于出现在倒数第1、5、9、13等位的数字

If (intLen - intCounter + 1) Mod 4 = 1 Then

'添加位" 万亿兆"

strTempCh = strTempCh & Trim(Mid(strSeqCh2, (intLen - intCounter) \ 4 + 1, 1))

End If

'组成汉字表达式

strCh = strCh & Trim(strTempCh)

Next

CChinese = strCh

End Function

补充:下面看下用VB实现重命名、拷贝文件夹及文件

Private Sub commandButton1_Click()

'声明文件夹名和路径

Dim FileName, Path As String, EmptySheet As String

'Path = “D:\上报”

Path = InputBox(“请输入” & Chr(34) & “成绩” & Chr(34) & “文件夹的路径,格式如” & Chr(34) & “D:\成绩” & Chr(34))

FileName = Path & “\上学期”

EmptySheet = Path & “\学期初始化”

'MsgBox FileName

If Dir(FileName, vbDirectory) <> “” Then

'MsgBox “文件夹存在”

'获取系统当前时间

'Dim dd As Date

'dd = Now

'MsgBox Format(dd, “yyyymm”)

Dim myTime As String

myTime = InputBox(“请输入当前时间,格式如” & Chr(34) & “201811” & Chr(34))

If myTime = “” Then

MsgBox “当前时间不能为空!否则不能重命名当期文件夹”

Else:

Name FileName As Path & “” & myTime

End If

End If

'判断文件夹是否存在

If Dir(FileName, vbDirectory) = “” Then

'创建文件夹

MkDir (FileName)

'MsgBox (“创建完毕”)

Else: MsgBox (“文件夹已在”)

End If

'复制空表到当期

Set Fso = CreateObject(“Scripting.FileSystemObject”)

'拷贝文件夹

Fso.copyfolder EmptySheet, FileName

'Fso.copyfile EmptySheet&“c:*.*”, “d:” '拷贝文件

'FileSystemObject.copyfolder EmptySheet, FileName, 1

MsgBox (“操作成功!”)

End Sub

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python人工智能 | 二十六.基于BiLSTM-CRF的医学命名实体识别研究(上)数据预处理
实体是知识图谱最重要的组成,命名实体识别(Named Entity Recognition,NER)对于知识图谱构建具有很重要意义。命名实体是一个词或短语,它可以在具有相似属性的一组事物中清楚地标识出某一个事物。命名实体识别(NER)则是指在文本中定位命名实体的边界并分类到预定义类型集合的过程。
Eastmount
2024/06/07
6430
Python人工智能 | 二十六.基于BiLSTM-CRF的医学命名实体识别研究(上)数据预处理
正则表达式的基本介绍与正则大全
正则表达式(Regular Expression)又称规则表达式,在代码中常简写为Regex、Regexp或RE,它是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符")。
M.Talen
2024/05/22
7010
正则表达式的基本介绍与正则大全
30 分钟轻松搞定正则表达式基础
提起正则表达式,可能大家的第一印象是:既强大好用但也晦涩难懂。正则表达式在文本处理中相当重要,各大编程语言中均有支持(跟 Linux 三剑客结合更是神兵利器)。
霍格沃兹测试开发
2020/07/14
4660
30 分钟轻松搞定正则表达式基础
如何理解软件测试学习中的正则表达式?
提起正则表达式,不知道大家第一印象是什么,可能是强大好用也可能是晦涩难懂。正则表达式在文本处理中相当重要,各大编程语言中均有支持,但可能使用起来有细微的差别,该学习笔记中元字符介绍一节不特定于某一个编程语言,旨在简要描述正则本身的基本用法。
霍格沃兹测试开发
2020/12/17
6800
一个正则表达式测试(只可输入中文、字母和数字)
  在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。之前在用java时特别是对用户名或密码使用正则非常爽,写脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够。这里就罗列了从网上找的很有用的资料,感谢大神们的贡献。 首先举一个例子: 匹配9-15个由字母/数字组成的字符串的正则表达式: NSString * regex = @"^[A-Za-z0-9]{9,15}$"; NSPredicate *pred = [NSPredi
猿人谷
2018/01/17
5.6K0
ASP.NET验证控件学习总结与正则表达式学习入门
在做Web应用程序的时候,因为用户有可能输入各式各样的信息,经常需要大量的数据验证,如果交给服务器去验证的话,无疑会增加服务器的压力,而且也容易造成程序的异常。甚至导致网站出现一些安全问题。因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。
阳光岛主
2019/02/19
2.6K0
在VBA中,如何应用正则表达式
在VBA中,正则表达式可以使用VBScript Regular Expressions库来实现。以下是VBScript Regular Expressions库中常用的一些方法和属性:
哆哆Excel
2024/01/19
8940
在VBA中,如何应用正则表达式
VBA实用小程序72:遍历文件夹(和子文件夹)中的文件
很多时候,我们都想要遍历文件夹中的每个文件,例如在工作表中列出所有文件名、对每个文件进行修改。VBA给我们提供了一些方式:(1)Dir函数;(2)File System Object。
fanjy
2021/04/21
10.7K0
VBA实用小程序72:遍历文件夹(和子文件夹)中的文件
30 分钟轻松搞定正则表达式基础
提起正则表达式,可能大家的第一印象是:既强大好用但也晦涩难懂。正则表达式在文本处理中相当重要,各大编程语言中均有支持(跟 Linux 三剑客结合更是神兵利器)。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。(来自百度百科) 个人理解如下:某个大佬为了从字符串中匹配或找出符合特定规律(如手机号、身份证号)的子字符串,先定义了一些通用符号来表示字符串中各个类型的元素(如数字用 \d 表示),再将它们组合起来得到了一个模板(如:\d\d模板就是指代两个数字),拿这个模板去字符串中比对,找出符合该模板的子字符串。 由几个例子去进一步理解,比如现在有一个字符串为: 1.test是一个正则表达式,它的匹配情况:I am a tester, and My job is to test some software. 它既可以匹配tester中的test,又可以匹配第二个test。正则表达式中的test就代表test这个单词本身。 2.\btest\b是一个正则表达式,它的匹配情况:I am a tester, and My job is to test some software. 它只能匹配第二个test。因为\b具有特殊意义,指代的是单词的开头或结尾。故tester中的test就不符合该模式。 3.test\w*是一个正则表达式,它的匹配情况:I am a tester, and My job is to test some software. 它匹配出了tester,也匹配出了第二个test。其中\w的意思是匹配字母数字下划线,表示的是数量,指有0个或多个\w。所以这个正则表达是的意思就是匹配开头为test,后续跟着0个及以上字母数字下划线的子字符串 4.test\w+是一个正则表达式,它的匹配情况:I am a tester, and My job is to test some software. 它只匹配了tester。因为+与不同,+的意思是1个或多个,所以该正则表达式匹配的是开头为test,后续跟着1个及以上字母数字下划线的字符串。 通过上述几个例子,应该可以看出正则表达式的工作方式,正则表达式由一般字符和元字符组成,一般字符就是例子中的‘test’,其指代的意思就是字符本身,t匹配的就是字母t;元字符就是例子中有特殊含义的字符,如\w, \b, *, +等。后续介绍一些基础的元字符。 元字符有很多,不同元字符有不同的作用,大致可以分为如下几类。 有些元字符专门用来指代字符串中的元素类型,常用的如下:
霍格沃兹测试开发
2022/04/24
4350
正则表达式中的特殊字符一览[通俗易懂]
〓简介〓 字符意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。 例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示匹配一个单词的分界线。或者:对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’。
全栈程序员站长
2022/08/31
5.2K0
《Kotin 极简教程》第15章 Kotlin 文件IO操作、正则表达式与多线程第15章 Kotlin 文件IO操作与多线程《Kotlin极简教程》正式上架:
我们在使用 Groovy 的文件 IO 操作的时候,感觉非常便利。同样的Kotlin也有好用的文件 IO 操作的 API。同样的在 Kotlin 中对 Java 的正则表达式功能做了一些实用的扩展。还有 Kotlin 中的多线程主要也是对 Java 的多线程 API 作了一些封装。因为这些 Java 已经有了很多的基础 API,Kotlin 并没有自己再去重复实现,而是在 Java 的基础上进行了实用的功能扩展。
一个会写诗的程序员
2018/08/17
3.4K0
第9章 文件IO操作、正则表达式与多线程第9章 文件IO操作、正则表达式与多线程
我们在《第6章 扩展函数与属性》中已经介绍过Kotlin中的类扩展的特性。使用Kotlin的扩展函数功能,我们可以直接为 String 类实现一个 inc() 函数,这个函数把字符串中的每一个字符值加1
一个会写诗的程序员
2018/08/17
1.9K0
JS正则表达式完整版
无意中从网上查找到一篇关于正则表达式的好文章,就进行了分享给大家,希望对大家有帮助。
全栈程序员站长
2022/09/17
3.1K0
JS正则表达式完整版
☀️ 学会编程入门必备 C# 最基础知识介绍(六)——接口、命名空间、预处理指令、正则表达式、异常处理、文件的输入与输出
接口定义了所有类继承接口时应遵循的语法合同。 接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。
呆呆敲代码的小Y
2021/08/20
1.4K0
☀️ 学会编程入门必备 C# 最基础知识介绍(六)——接口、命名空间、预处理指令、正则表达式、异常处理、文件的输入与输出
推荐阅读
相关推荐
Python人工智能 | 二十六.基于BiLSTM-CRF的医学命名实体识别研究(上)数据预处理
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文