VBScript用户inputvariables

我正在创build一个脚本来分割csv文件,我想让用户input文件被分割成新的时间间隔。

我遇到的问题是,当我input的时间间隔不是分裂的,但是如果我硬编码的价值在它分裂。

Option Explicit Const ForReading = 1 Const ForWriting = 2 Dim objFSO, objInputFile, objOutputFile Dim intLine, intFile Dim strHeaders Dim strInputFile, strOutputPrefix, strLine Dim MyDate Dim userSplit Dim split 'strInputFile = InputBox("Enter file location") strInputFile = "H:\VBS\domS_CUST.csv" strOutputPrefix = strInputFile & DatePart("yyyy", Now) & "-" & DatePart("m", Now) & "-" & DatePart("d", Now) intFile = 1 intLine = 0 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objInputFile = objFSO.OpenTextFile(strInputFile, ForReading) If (objInputFile.AtEndOfStream = True) Then ' The file is empty WScript.Quit 1 End If strHeaders = objInputFile.ReadLine userSplit = InputBox("Enter when you want to split") Do While (objInputFile.AtEndOfStream = False) split = userSplit strLine = objInputFile.ReadLine If (intLine <= 0) Then Set objOutputFile = objFSO.CreateTextFile(strOutputPrefix & "_" & intFile & ".csv", True) objOutputFile.WriteLine strHeaders intLine = 1 End If objOutputFile.WriteLine strLine If (intLine >= split) Then objOutputFile.Close Set objOutputFile = Nothing intFile = intFile + 1 intLine = 0 Else intLine = intLine + 1 End If Loop 

input是这一行:

 userSplit = InputBox("Enter when you want to split") 

而我似乎无法得到它在这个价值分裂,任何帮助将不胜感激!

你的代码中有一个On Error Resume Next ,你没有显示,否则就行

 split = userSplit 

会提出错误

非法转让:“拆分”

split是一个内置函数的名称,所以它不能用作variables名。 这也是完全没有必要的,因为你可以简单地使用userSplit而不将它的值赋给另一个variables。


更正:正如Ekkehard.Horner在注释中指出的那样, Dim split取代了内置的函数定义,因此不会引发错误。


但是,您的代码无法正常工作的主要原因是InputBox函数返回一个string值。 为了与intLine进行比较,需要将string转换为整型或长整型:

 userSplit = CLng(InputBox("Enter when you want to split")) ... If (intLine >= userSplit) Then 

你至less应该添加一个检查来处理用户按下“取消”的情况:

 userSplit = CLng(InputBox("Enter when you want to split")) If userSplit <= 0 Then WScript.Quit 1 

另外,通过使用Line属性,您的代码可以简化为:

 filename = "H:\VBS\domS_CUST.csv" Set fso = CreateObject("Scripting.FileSystemObject") Set infile = fso.OpenTextFile(filename) prefix = fso.BuildPath(fso.GetParentFolderName(filename) _ , fso.GetBaseName(filename) & "_" & Year(Now) & "-" _ & Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & "_") userSplit = CLng(InputBox("Enter when you want to split")) If userSplit <= 0 Then WScript.Quit 1 Do Until infile.AtEndOfStream If infile.Line = 1 Then headers = infile.ReadLine Else If (infile.Line - 2) Mod userSplit = 0 Then If infile.Line > 2 Then outfile.Close Set outfile = fso.CreateTextFile _ (prefix & (infile.Line - 2) \ userSplit + 1 & ".csv", True) outfile.WriteLine headers End If outfile.WriteLine infile.ReadLine End If Loop outfile.Close