2009-07-08 15 views
5

Ho bisogno di leggere i file usando vbscript e rimuovere tutti gli spazi iniziali, comprese le eventuali schede. Ora LTRIM rimuoverà gli spazi iniziali, ma come rimuoverò anche le schede.Trim spazi iniziali comprese le schede

Grazie.

risposta

10

Questa funzione rimuove tutti gli spazi leader (spazi, tabulazioni, ecc) da una stringa:

Function LTrimEx(str) 
    Dim re 
    Set re = New RegExp 
    re.Pattern = "^\s*" 
    re.Multiline = False 
    LTrimEx = re.Replace(str, "") 
End Function 
0

risposta di Andrew non è corretta. LTrim, RTrim e Trim rimuovono solo gli spazi, non le schede.

Ho riformattato il codice e aggiunto una funzione per eliminare tutti i caratteri iniziali o finali.

filename="test.txt" 

set fso = createobject("scripting.filesystemobject") 
set f = fso.opentextfile(filename) 

do while not f.AtEndOfStream 
    s = TrimChars(f.readline, " " + vbTab) 
    wscript.echo "|" & s & "|" 
loop 

f.close 

set f = nothing 
set fso = nothing 

''--- 

function TrimChars(s, sChars) 
    dim n, nLen, nStart 

    nLen = Len(s) 
    if nLen = 0 then 
    TrimChars = s 
    exit function 
    end if 

    ''- skip leading chars 
    n = 1 
    do while (n <= nLen) And (InStr(sChars, Mid(s, n, 1)) > 0) 
    n = n + 1 
    loop 
    nStart = n 

    ''- skip trailing chars 
    n = nLen 
    do while (n > nStart) And (InStr(sChars, Mid(s, n, 1)) > 0) 
    n = n - 1 
    loop 

    ''- return remaining chars 
    nLen = n - nStart + 1 
    if (nLen > 0) and (nStart <= len(s)) then 
    TrimChars = Mid(s, nStart, nLen) 
    else 
    TrimChars = "" 
    end if 
end function 
0
Function LTrimEx(str) 
    Do Until x 
     If Left(str, 1) = Chr(32) Or Left(str, 1) = Chr(9) then 
      str = Right(str, Len(str) - 1) 
     Else 
      x = true 
     End If 
    Loop 
    LTrimEx = str 
End Function 
9

Per un assetto sia a destra ea sinistra (tra cui schede, ritorno a capo, avanzamenti di riga, spazi) in una stringa multilinea questo funzionerà.

Function MultilineTrim (Byval TextData) 
    Dim textRegExp 
    Set textRegExp = new regexp 
    textRegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}" 
    textRegExp.Global = False 
    textRegExp.IgnoreCase = True 
    textRegExp.Multiline = True 

    If textRegExp.Test (TextData) Then 
     MultilineTrim = textRegExp.Replace (TextData, "$1") 
    Else 
     MultilineTrim = "" 
    End If 
End Function 
+1

Grande funzionalità, grazie! –

Problemi correlati