Python到VBScript的转换
我需要帮助将Python脚本转换为VBScript。我试图将.cal文件作为二进制值文件加载并编辑文件中的特定值,但不幸的是,我的环境仅支持VBScriptPython到VBScript的转换,vbscript,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
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
请看下面的帖子:。您可以使用
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
函数readBinary(strPath)
Dim of so:Set of so=CreateObject(“Scripting.FileSystemObject”)
Dim of ile:Set of ile=oFSO.GetFile(strPath)
如果为空(oFile),则MsgBox(“未找到文件:”&strPath):退出函数
使用oFile.OpenAsTextStream()
readBinary=.Read(文件大小)
关
以
端函数
函数writeBinary(strBinary,strPath)
Dim of so:Set of so=CreateObject(“Scripting.FileSystemObject”)
'以下行:检查是否可以进行写访问!
暗色oTxtStream
出错时继续下一步
设置oTxtStream=oFSO.createTextFile(strPath)
如果错误号为0,则MsgBox(错误消息):退出函数
错误转到0
设置oTxtStream=Nothing
'结束写访问检查
使用of so.createTextFile(strPath)
.写入(标准二进制)
关
以
端函数
如果你想得到任何人的帮助,你至少需要自己尝试这样做。@Jay Riggs我已经尝试过了,但唯一的问题是,如果我将文件作为文本文件加载,我能够进行更改,但我不知道如何加载相同的二进制值并进行更改。将更改作为文本有什么问题?