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


vbs

3个回答

 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
qq_27495923
不知者黑 回复weixin_42695878: 回复迟了不好意思 昨天没有登上来看!
一年多之前 回复
qq_27495923
不知者黑 给大佬递茶 - -! 你的脚本完全OK
一年多之前 回复
weixin_42695878
weixin_42695878 @qq_27495923 答案是否合意,想下载个东西,急需你宝贵的C币
一年多之前 回复

看一下全角,半角是否出错

不同情况下定义的REM根值不同,参考https://www.cnblogs.com/azhai-biubiubiu/p/6003597.html

qq_27495923
不知者黑 是的,但是修改根值一句话就搞定了,现在全篇都是PX,先转成rem,然后再根据情况调整根值就好了。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问