0

我正在创建一个脚本来拆分 csv 文件,我想让用户输入文件被拆分为新文件的间隔。

我遇到的问题是,当我输入间隔时它没有分裂,但是如果我对其中的值进行硬编码,它确实会分裂。

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 

输入是这一行:

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

而且我似乎无法将其拆分为这个值,任何帮助将不胜感激!

4

1 回答 1

2

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

split = userSplit

会引发错误

非法分配:'split'

split是内置函数的名称,因此不能用作变量名。这也是完全没有必要的,因为您可以简单地使用userSplit而不将其值分配给另一个变量。


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


但是,您的代码无法按预期工作的主要原因是该InputBox函数返回一个字符串值。为了使比较intLine正常工作,您需要将字符串转换为整数或长整数:

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

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

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
于 2013-08-12T09:40:26.107 回答