VBA提高篇_13 Dir函数及子文件夹/子文件的处理 <<递归>>

Dir函数 获取文件名

  1. 重要提示: Dir函数查找文件的顺序在不同系统中各不相同,往往与我们看到的不一致

  2. 当DIR返回空字符串时,代表所有文件名都已经被找到,本次查找结束

  3. 写参数与不写参数的区别

在这里插入图片描述

  1. 若Dir判定的文件不存在,则直接返回空字符串(可以作文件是否存在的辅助判定)

  2. Dir函数不会查找子文件夹中的文件和文件夹

    • 如果需要处理,则需要使用递归
'搜寻文件和子文件夹的名字
'注意: 子文件夹包括"."和".."两个特殊的名字
'分别代表本目录(d:\demo\和其父目录"d:\")
f = dir("d:\demo\",vbDirectory)
Option Explicit
Sub dirTest()
    Dim f As String
    
    f = Dir("d:\")
   
    Do While f <> ""
        '在此处对名为f的文件进行打开和读取操作
        Call readFromFile("d:\demo\" & f)
        f = Dir
    Loop
End Sub

' 读取文件名为fullName变量的文件
' 取出每行的城市名和电话号码,写入一张新建的工作表当中

Sub readFromFile(fullName As String)
    Dim ws As Worksheet, i As Long, s As String
    
    '创建工作表,并将表名改为文件名,InStrRev函数
    '与 Instr函数功能相同,不过是从最右边开始查找字符
    Set ws = Worksheets.add
    ws.Name = Mid(fullName, InStrRev(fullName, "\") + 1)
    
    Open fullName For Input As #1
    
    i = 1
    Do While Not EOF(1)
        Line Input #1, s
        ws.Cells(i, 2) = Left(s, 2)
        ws.Cells(i, 3) = Mid(s, InStr(s, "电话") + 3, 8)
        i = i + 1
    Loop
    
    Close #1

End Sub

Sub readFromFile(fullName As String)
    Dim a As Workbook ,path As String,fileName as String
    
	path = "d:\demo\workbooks\*.xlsx"
	fileName = Dir(path)
	
    
    i = 1
    Do While fileName <> ""
        set w = Workbooks.Open(path & fileName)
		' 此处可以处理当前打开的w工作簿
		w.close
        fileName = Dir
    Loop
    
    Close #1

End Sub

递归算法简约不简单

深层次文件夹的处理

在这里插入图片描述

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用之前提到的 `xml.etree.ElementTree` 模块来解析XML字符串,并通过递归遍历XML树来查找满足条件的标签。以下是一段实现该功能的示例代码: ```python import xml.etree.ElementTree as ET def find_next_audio_xpath(xml_str, tag_name, text): root = ET.fromstring(xml_str) namespaces = {'ns': 'http://www.hikvision.com/ver20/XMLSchema'} def traverse(node, found): if found: return True for child in node: if child.tag == tag_name and child.text == text: found = True elif found and child.tag == 'Audio': for subchild in child: print(ET.ElementTree(root).getpath(subchild)) return True found = traverse(child, found) return found traverse(root, False) # 示例用法 xml_string = '''<?xml version="1.0" encoding="UTF-8"?> <StreamingChannelList xmlns="http://www.hikvision.com/ver20/XMLSchema"> <StreamingChannel xmlns="http://www.hikvision.com/ver20/XMLSchema"> <id>101</id> <channelName>Camera 01</channelName> <enabled>true</enabled> </StreamingChannel> <StreamingChannel xmlns="http://www.hikvision.com/ver20/XMLSchema"> <id>102</id> <channelName>Camera 01</channelName> <enabled>true</enabled> <Video> <enabled>true</enabled> </Video> <Audio> <enabled>false</enabled> <audioInputChannelID>1</audioInputChannelID> <audioCompressionType>MP2L2</audioCompressionType> </Audio> </StreamingChannel> </StreamingChannelList>''' find_next_audio_xpath(xml_string, 'id', '102') ``` 在上述示例中,`find_next_audio_xpath`函数接受三个参数:`xml_str`表示输入的XML字符串,`tag_name`表示目标标签名,`text`表示目标标签的文本内容。函数首先将XML字符串解析为一个元素树,并通过递归遍历树来查找满足条件的标签。当找到目标标签后,会继续遍历其后面的标签,如果遇到了标签名为'Audio'的标签,则会输出其标签的XPath路径。 在示例中,输入的XML字符串是一个包含了两个 `<StreamingChannel>` 标签的例函数将找到一个满足条件的标签(id为102),并输出其后面的标签名为'Audio'的标签的XPath路径。你可以根据实际需求修改代码,例如将匹配到的XPath路径存储到一个列表中返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值