首页 > 解决方案 > Python 到 VBScript 的转换

问题描述

我需要帮助将 Python 脚本转换为 VBScript。我正在尝试将 .cal 文件加载为二进制值文件并编辑文件中的特定值,但不幸的是,我的环境仅支持 VBScript。

import argparse

parser = argparse.ArgumentParser(description='Sapix Cal File Sensitivity Adjustment')
parser.add_argument("-calfile", default="test.cal", help="Enter the Calfile name (ex: 09781DK5081.cal")
parser.add_argument("-vtest", default=125, help="New Vtest setting (85-205)")
parser.add_argument("-vref", default=250, help="New Vref setting (250-120)")


args = parser.parse_args()
calfile = args.calfile
vtest = args.vtest
vref = args.vref


print(calfile)
print(vtest)
print(vref)


with open(calfile, "rb") as binary_file:
    # Read the whole file at once
    data = bytearray(binary_file.read())

    # Find Line with VTEST setting
    ivteststart = data.find(bytearray('PARALLEL_VOLTAGE_TEST', 'utf-8'))
    ivtestend = data.find(b'\n',ivteststart)

    # Remove original VTEST line
    del data[ivteststart:ivtestend+1]

    # Insert New Line with new VTEST
    new_vtest = bytearray("PARALLEL_VOLTAGE_TEST %s\n" % (vtest),'utf-8')
    data[ivteststart:ivteststart] = new_vtest

    # Find Line with VREF setting
    ivrefstart = data.find(bytearray('PARALLEL_VOLTAGE_REF', 'utf-8'))
    ivrefend = data.find(b'\n',ivrefstart)

    # Remove original VREF line
    del data[ivrefstart:ivrefend+1]

    # Insert New Line with new VREF
    new_vref = bytearray("PARALLEL_VOLTAGE_REF %s\n" % (vref),'utf-8')
    data[ivrefstart:ivrefstart] = new_vref



    # Write new sensitivity settings to cal file
with open(calfile, "wb") as binary_file:
    binary_file.write(data)

如果我将文件加载为文本文件,我能够进行更改,但我不知道如何加载与二进制值相同的值并进行更改

Option Explicit

Dim objFso, objFolder, objFile, objOtF, cd, content

Dim targetDir
targetDir = "C:\Kiosk\UI"

Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "\bPARALLEL_VOLTAGE_TEST \d+\b"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(targetDir)

For Each objFile in objFolder.Files
    If LCase(Right(objFile.Name, 4)) = ".cal" Then
        cd = objFile.Name

        Set objOtF = objFso.OpenTextFile(cd, 1)
        content = objOtF.ReadAll
        objOtF.Close

        Set objOtF = objFso.OpenTextFile(cd, 2)
        objOtF.Write objRegExp.Replace(content, "PARALLEL_VOLTAGE_TEST 230")
        objOtF.Close


Dim objRegExp1
Set objRegExp1 = New RegExp
objRegExp1.Pattern = "\bPARALLEL_VOLTAGE_REF \d+\b"

        Set objOtF = objFso.OpenTextFile(cd, 1)
        content = objOtF.ReadAll
        objOtF.Close

        Set objOtF = objFso.OpenTextFile(cd, 2)
        objOtF.Write objRegExp1.Replace(content, "PARALLEL_VOLTAGE_REF 190")
        objOtF.Close

    End If
    Next

标签: vbscript

解决方案


看看下面的帖子:在 VBscript 中读写二进制文件。您也许可以ADODB.Stream用来读取和写入二进制数据。还探索了其他方法,包括将字符一个一个地读取到数组中。

这是该帖子的代码:

Function readBinary(strPath)

    Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
    Dim oFile: Set oFile = oFSO.GetFile(strPath)

    If IsNull(oFile) Then MsgBox("File not found: " & strPath) : Exit Function

    With oFile.OpenAsTextStream()
        readBinary = .Read(oFile.Size)
        .Close
    End With

End Function

Function writeBinary(strBinary, strPath)

    Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")

    ' below lines pupose: checks that write access is possible!
    Dim oTxtStream

    On Error Resume Next
    Set oTxtStream = oFSO.createTextFile(strPath)

    If Err.number <> 0 Then MsgBox(Err.message) : Exit Function
    On Error GoTo 0

    Set oTxtStream = Nothing
    ' end check of write access

    With oFSO.createTextFile(strPath)
        .Write(strBinary)
        .Close
    End With

End Function

推荐阅读