不知者黑 2018-07-14 11:52 采纳率: 100%
浏览 1244
已采纳

VBS批量替换(转换)文本文件中的单位(求达人瞧一下)

需求:遍历文本文件,在里面找到像素单位(例:“100px”),替换成相对单位(例如:“3rem”);px与rem单位转换过程中是一个固定比例。

研究半天弄了下面一个脚本,但是不能替换到位。望大佬给个意见

 Dim regEx,Match,Matches
Set regEx = New RegExp    '创建一个正则表达式
regEx.Pattern = "^[1-9]\d*px$"     '设置正则表达式的匹配模式
regEx.IgnoreCase  = True  '设置为不区分大小写
regEx.Global  = True      '设置为全局可用

dim fso, f
set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile("1.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建
set e = fso.OpenTextFile("2.txt", 8, True) 
Do Until f.AtEndOfStream
    strLine = f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数
     Set Matches = regEx.Execute(strLine)  '执行搜索
     For  Each  Match  in  Matches  '遍历所有的匹配
      x=Len(Match)
      n=Left(Match,x-2)                ' 拆分去掉最后的px
      o = n/30                            ' 换算。
      p ="rem"
      replStr = o&p' 拼接。
      MsgBox regEx.Peplace(strLine,replStr)
     Next
     e.WriteLine(strLine)
Loop

f.Close()
e.Close()
set f = nothing
set fso = nothing


  • 写回答

3条回答 默认 最新

  • weixin_42695878 2018-07-17 16:06
    关注
     Dim regEx,Match,Matches
    Set regEx = New RegExp    '创建一个正则表达式
    regEx.Pattern = "([1-9]\d*)px"     '设置正则表达式的匹配模式
    regEx.IgnoreCase  = True  '设置为不区分大小写
    regEx.Global  = True      '设置为全局可用
    
    dim fso, f
    set fso = CreateObject("Scripting.FileSystemObject")
    set f = fso.OpenTextFile("1.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建
    set e = fso.OpenTextFile("2.txt", 8, True) 
    
    dim strLine
    Do Until f.AtEndOfStream
        strLine = f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数
        strResult = ""
        nextIndex = 1
        For Each m In regEx.Execute(strLine)
            strResult = strResult & Mid(strLine, nextIndex, m.FirstIndex - nextIndex + 1)
            strResult = strResult & CStr(round(CInt(m.Submatches(0))/ 30, 2))
            strResult = strResult & "rem"
            nextIndex = m.FirstIndex + Len(m.Value) + 1
        Next
    
        strResult = strResult & Mid(strLine, nextIndex)
        e.WriteLine(strResult)
    Loop
    
    f.Close()
    e.Close()
    set f = nothing
    set fso = nothing
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 有卷积神经网络识别害虫的项目吗
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件