2013-06-13 10 views
5

Mam poniższy kod. Otrzymuję nieprawidłowe wywołanie lub procedurę w tym oświadczeniu txsOutput.Writeline txsInput1.ReadAll ..Połączeniem pliku jest plik tekstowy, który ma kilka wpisów ten format:uzyskiwanie nieprawidłowego wywołania procedury lub argumentu w vbscript

nazwa test.css.

Czy ktoś może mi powiedzieć, co jest nie tak ze skryptem.

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 

Odpowiedz

8

Błąd 5 Dzwoniąc TextStream.WriteLine jest zwykle spowodowane przez próby zapisu dane, TextStream nie może kodować:

Próbuje napisać „U + 1F00 a e1 bc 80 GRECJę mała litera Alpha z Psili”do strumienia otwarty z/do '' kodowania 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 

aby to udowodnić:

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

Ponieważ źródło danych (.ReadAll()) wydaje się pochodzić z WWW, prawdopodobnie zawiera ono tekst inny niż ASCII/ANSI. Ostrzegamy jednak, że otwarcie pliku wyjściowego dla Unicode (= UTF-16) nie pomoże, jeśli wejście jest kodowane w UTF-8 przez .ReadAll() w strumieniu tekstowym ASCII.

+0

Zgaduję, że masz rację ... Mam jeden konkretny plik css, który jest błąd podczas rzucania, ale inne, takie jak js i inne css działają poprawnie .. nie wiesz, co się dzieje z tym plikiem. – user505210

+0

Użyłem pierwszej propozycji z tylko 2 parametrami i czasami działało (otrzymuję dane z bazy danych serwera mssql). Wygląda na to, że działa za każdym razem dzięki rozwiązaniu, które podałeś. Czy to oznacza, że ​​wymuszanie nadpisywania używa prawidłowego kodowania? (Dzięki, przy okazji) – matthieusb

+0

Nie, ** drugi ** True (Unicode) jest prawdziwym rozwiązaniem. –

0

Nie widząc tego konkretnego pliku wejściowego, niewiele możemy powiedzieć. Jednakże, może być w stanie odizolować źródło błędu zastępując:

txsOutput.Writeline txsInput1.ReadAll 

ze coś takiego:

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 

Kontrola plik wejściowy z edytorem hex może być również opcja.

Powiązane problemy