【问题标题】:getting invalid procedure call or argument in vbscript在 vbscript 中获取无效的过程调用或参数
【发布时间】:2013-06-18 02:01:33
【问题描述】:

我有以下代码..我在此语句 txsOutput.Writeline txsInput1.ReadAll 处收到无效的调用或过程..组合文件是一个文本文件,其中包含一些这种格式的条目

命名 test.css。

谁能告诉我脚本出了什么问题。

Dim strInputPath1
Dim txsInput1,txsOutput
Dim FSO

Dim Filename


Set FSO = CreateObject("Scripting.FileSystemObject")
strOutputPath = "C:\txt3.txt"
Set txsOutput = FSO.CreateTextFile(strOutputPath)

Set re = New RegExp
re.Pattern = "\s+"
re.Global  = True

Set f = FSO.OpenTextFile("C:\combination.txt")
Do Until f.AtEndOfStream
  tokens = Split(Trim(re.Replace(f.ReadLine, " ")))
  extension = Split(tokens(0),".")
  strInputPath1 =  "C:\inetpub\wwwroot\data\p\" & tokens(1) & "\" & extension(1) & "\" & tokens(0) 

Loop
f.Close

WScript.Echo strInputPath1

Set txsInput1 = FSO.OpenTextFile(strInputPath1, 1)
txsOutput.Writeline txsInput1.ReadAll

txsInput1.Close
txsOutput.Close

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    调用TextStream.WriteLine时的错误5一般是因为试图写入TextStream不能编码的数据:

    尝试将“U+1F00 ἀ e1 bc 80 GREEK SMALL LETTER ALPHA WITH PSILI”写入使用/用于“ASCII”编码的流:

    >> Set f = goFS.CreateTextFile(".\tmp.txt")
    >> f.WriteLine "AÄ"
    >>  --- no news here means: written ---
    >> f.WriteLine ChrW(&H1F00)
    >>
    Error Number:       5
    Error Description:  Invalid procedure call or argument
    

    为了证明这一点:

    >> f.close
    >> Set f = goFS.CreateTextFile(".\tmp.txt", True, True) ' overwrite, unicode
    >> f.WriteLine ChrW(&H1F00)
    >>
    >> --- no news are good news --
    

    由于数据源 (.ReadAll()) 似乎来自 WWW,它很可能包含非 ASCII/ANSI 文本。但请注意,如果输入是 UTF-8 被 ASCII 文本流上的 .ReadAll() 吞并,则仅打开 Unicode (=UTF-16) 的输出文件将无济于事。

    【讨论】:

    • 我猜你是对的..我有一个特定的 css 文件抛出错误,但其他像 js 和其他 css 工作正常..不确定该文件发生了什么。
    • 我使用了第一个命题,只有 2 个参数,有时它确实有效(我从 mssql 服务器数据库获取数据)。似乎它每次都适用于您提供的解决方案。这是否意味着强制覆盖使用正确的编码? (顺便谢谢)
    • 不, True (unicode) 才是真正的解决方案。
    【解决方案2】:

    如果没有实际看到特定的输入文件,我们就无法告诉您更多信息。但是,您可以通过替换来隔离错误的来源:

    txsOutput.Writeline txsInput1.ReadAll
    

    类似这样的:

    On Error Resume Next
    Do Until txsInput1.AtEndOfStream
      line = txsInput1.ReadLine
      If Err Then
        WScript.Echo "Operation:   Read" & vbNewLine _
          "Error:       " & Err.Number & vbNewLine _
          "Description: " & Err.Description & vbNewLine _
          "Line:        " & txsInput1.Line
        WScript.Echo "Text:        " & line
      End If
      Err.Clear
    
      txsOutput.WriteLine line
      If Err Then
        WScript.Echo "Operation:   Write" & vbNewLine _
          "Error:       " & Err.Number & vbNewLine _
          "Description: " & Err.Description & vbNewLine _
          "Line:        " & txsInput1.Line
        WScript.Echo "Text:        " & line
      End If
      Err.Clear
    Loop
    On Error Goto 0
    

    也可以选择使用十六进制编辑器检查输入文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多