반응형

VBScript의 함수에 대해서는 아래를 참고한다. (Function과 Sub의 작동방식, 차이)

https://ansan-survivor.tistory.com/1591

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript) 함수만들기, 함수값 Return 받기, 서브루틴 (Sub Routine)

User Define Function으로 함수를 만들고, 함수를 호출할 때는 Call 으로 한다. Function 함수 만들기 기본 예제 사용법... 두 값을 받아 출력하는 함수. Function sayHello(name, age) msgbox( name & " is " & age & " years ol

ansan-survivor.tistory.com

 

 

vbscript는 외부의 .vbs를 쉽게 가져와 실행이 불가, 그래서 전역변수를 만들어 가져오는 방법이다.

 

아래의 예시는,

a.vbs와 b.vbs가 동일 경로에 있을 때 아래와 같은 방법으로 Include 함수로 해당 .vbs 파일을 불러와 사용.

 

1.   a.vbs에 전역변수로 선언되어있는 값을 msgbox로 보기

2.   a.vbs에서 선언된 함수의 리턴값을 msgbox로 보기

3.   a.vbs의 sub루틴 함수 실행하기

 

a.vbs 파일에 있는 Add() 함수를 가져와서 b.vbs 에 실행하는 방법.

a.vbs 파일

'
' 공용함수를 보관할 스크립트
'

Option Explicit

' 전역변수로 쓸 값 확인, 결과값에 +3을 함
Dim AddResult_Plus3

' Function으로 값 리턴하기
Function Add(a, b)
    Dim fun_result
    ' 전역변수에 값을 대입
    AddResult_Plus3 = a + b + 3

    ' Add함수의 리턴 값. Add함수명에 아래와 같이 값을 넣어주어야 함.
    fun_result = a + b
    Add = fun_result
End Function


' Sub-routine은 리턴기능이 없음. 자체적 기능 수행.
Sub MySubRoutine
    MsgBox TimeValue(Time)
End Sub

 

반응형

 

b.vbs 파일

Option Explicit


' import external .vbs file
Sub Include(sFilePath)
    On Error Resume Next

    Dim oFSO, oTextFile, sText

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FileExists(sFilePath) Then
        Set oTextFile = oFSO.OpenTextFile(sFilePath, 1)  ' 1 = for Reading
        sText = oTextFile.ReadAll
        oTextFile.Close
        ExecuteGlobal sText
    End If

    Set oFSO = Nothing
    Set oTextFile = Nothing
End Sub

' a.vbs 불러오기
Call Include("a.vbs")


' 1.  a.vbs 내에 있는 함수를 실행하기, 전역변수 출력하기
Call Add(1,2)
' a에 선언되어있는 전역변수값 출력, 해당 변수는 Add()결과 값
MsgBox AddResult_Plus3


' 2. 리턴된 함수값 확인
Dim FromExternalValue
FromExternalValue = Add(1,2)
MsgBox FromExternalValue


' 3. sub 루틴 함수 실행
Call MySubRoutine()

 

(결과)

b를 실행시키면, a.vbs 내 선언된 Add() 함수를 연산하여, msgbox로 아래 순서대로 띄움.

 

  * 전역변수 AddResult_Plus3

  * 리턴값 FromExternalValue

  * Sub루틴 함수 실행 결과 

 

 

 

반응형
반응형

함수 vartype(변수명) 으로 해당 변수가 어떤 Type인지 확인할 수 있다.

사용법

msgbox(vartype(변수명))

 

이 함수는 숫자를 반환하며, 아래와 같다.

  • 0 = vbEmpty이 - 빈 나타냅니다 (uninitialized)
  • 1 = vbNull은 - 널 표시 없음 (no valid data)
  • 2 = vbInteger는 - 정수(Int)를 나타냄 (소수점 없는)
  • 3 = vbLong은 - 실수(Long) 타입 숫자
  • 4 = vbSingle - 단일 정밀도 부동 소수점 숫자를 나타냅니다
  • 5 = vbDouble은 - 배정 밀도 부동 소수점 숫자를 나타냅니다
  • 6 = vbCurrency은 - 통화를 나타냅니다. ($13.2 같은 화폐단위)
  • 7 = vbDate은 - 날짜를 나타냅니다. ("2012-01-01" 같은...)
  • 8 = vbString - 문자열을 나타냅니다. ("hello world" 같은 String 문자열)
  • 9 = vbObject는 - 자동화 개체를 나타낸다 (object 타입 임.)
  • 10 = vbError은 - 에러를 나타낸다.
  • 11 = vbBoolean는 - 부울를 나타냄. (True 나 False를 나타냄.)
  • 12 = vbVariant는 - 변형 나타냄 (used only with arrays of Variants)
  • 13 = vbDataObject은 - 데이터 액세스 개체를 나타낸다
  • 17 = vbByte는 - 바이트를 나타냄
  • 8192 = vbArray - 배열을 나타낸다
  • 8204 = vbArray of Arrays - 배열 내 배열을 나타낸다

 

해당 타입을 Msgbox로 출력해보면 숫자로 나오니 확인.

 

만약 매번 숫자로 타입확인하기 싫다. 문자로 확인하고 싶다 하는 경우는 아래와 같이 Function을 만든다.

Function GetVarTypeDescription(varExpression)
    Select Case VarType(varExpression)
        Case 0
            GetVarTypeDescription = "Empty"
        Case 1
            GetVarTypeDescription = "Null"
        Case 2
            GetVarTypeDescription = "Integer"
        Case 3
            GetVarTypeDescription = "Long"
        Case 4
            GetVarTypeDescription = "Single"
        Case 5
            GetVarTypeDescription = "Double"
        Case 6
            GetVarTypeDescription = "Currency"
        Case 7
            GetVarTypeDescription = "Date"
        Case 8
            GetVarTypeDescription = "String"
        Case 9
            GetVarTypeDescription = "Object"
        Case 10
            GetVarTypeDescription = "Error"
        Case 11
            GetVarTypeDescription = "Boolean"
        Case 12
            GetVarTypeDescription = "Variant"
        Case 8204
            GetVarTypeDescription = "Array of Arrays (Jagged Array)"
        Case Else
            GetVarTypeDescription = "Unknown Type"
    End Select
End Function

 

반응형

 

그리고 이 함수를 이용해서 해당 변수의 타입이 무엇인지 쉽게 확인할 수 있다.

함수를 사용하는 방법은 아래.

a = ""
b = 123
c = 32.12
d = "hello world"
e = true
x = Array(Array(1,2,3), Array(4,5,6))

MsgBox(GetVarTypeDescription(a))
MsgBox(GetVarTypeDescription(b))
MsgBox(GetVarTypeDescription(c))
MsgBox(GetVarTypeDescription(d))
MsgBox(GetVarTypeDescription(e))
MsgBox(GetVarTypeDescription(x))

Function GetVarTypeDescription(varExpression)
    Select Case VarType(varExpression)
        Case 0
            GetVarTypeDescription = "Empty"
        Case 1
            GetVarTypeDescription = "Null"
        Case 2
            GetVarTypeDescription = "Integer"
        Case 3
            GetVarTypeDescription = "Long"
        Case 4
            GetVarTypeDescription = "Single"
        Case 5
            GetVarTypeDescription = "Double"
        Case 6
            GetVarTypeDescription = "Currency"
        Case 7
            GetVarTypeDescription = "Date"
        Case 8
            GetVarTypeDescription = "String"
        Case 9
            GetVarTypeDescription = "Object"
        Case 10
            GetVarTypeDescription = "Error"
        Case 11
            GetVarTypeDescription = "Boolean"
        Case 12
            GetVarTypeDescription = "Variant"
        Case 8204
            GetVarTypeDescription = "Array of Arrays (Jagged Array)"
        Case Else
            GetVarTypeDescription = "Unknown Type"
    End Select
End Function

 

이제 결과를 보면 해당 변수의 타입이 무엇인지 msgbox로 출력된다.

 

 

 

 

반응형
반응형

VBScript의 배열에 대한 자세한 설명은 아래에...

https://ansan-survivor.tistory.com/1590

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript) 배열, 리스트 (Array), 배열 크기, 배열사이즈 함수 uboun

VBscript에서 배열을 선언하는 방식은 아래와 같다. 'Method 1 : 동적 배열 선언 (사이즈를 한정하지 않음) Dim arr1() 'Without Size 'Method 2 : 정적 배열 선언 (사이즈를 한정함 5칸) Dim arr2(5) 'Declared with size of

ansan-survivor.tistory.com

 

배열 행렬 (Array)의 내부 인자에 어떤값이 들어있는지 찾고싶을 때 debug용 코드

아래와 같은 행렬 모양의 내부 인자값들을 Msgbox로 알아보고 싶을 때.

(결과)

배렬의 인자 순서대로 msgbox가 차례대로 아래와 같이 출력된다.

반응형

 

코드

' 동적 행렬선언.
Dim pntsArr()


' 행렬 선언 <배열명>(column, row) 형태의 메모리크기 지정.
' 0부터 카운터 함으로 pntsArr<3자리, 5자리>  
' 즉, pntsArr(2,4)에서 2는 0,1,2임으로 3칸을 의미.
' 3번째 칸은 곡선을 만들 때 사용.
ReDim pntsArr(2,4)

' 좌표 그리기 0,0 부터 쭉 그리고 다시 0,0으로 닫음.
pntsArr(0,0) = 0.0   :pntsArr(1,0) = 0.0   :pntsArr(2,0) =    0.0
pntsArr(0,1) = 200.0 :pntsArr(1,1) = 0.0   :pntsArr(2,1) =    0.0
pntsArr(0,2) = 200.0 :pntsArr(1,2) = 100.0 :pntsArr(2,2) =    0.0
pntsArr(0,3) = 0.0   :pntsArr(1,3) = 100.0 :pntsArr(2,3) =    0.0
pntsArr(0,4) = 0.0   :pntsArr(1,4) = 0.0   :pntsArr(2,4) =    0.0

Dim i, j, WScript
For i = 0 to UBound(pntsArr, 2)
    For j = 0 to UBound(pntsArr, 1)
        MsgBox( "(" & j & "," & i & "): " & pntsArr(j, i) ) 
    Next 
Next

 

 

 

 

반응형
반응형

아래 정규표현식 예가 있으며, 입맛에 맞게 쓸 수 있다.

 

1.  [ ] 

 []사이의 문자들과 매치, [abc]의미는 문자열에서 a,b,c가 하나라도 들어가면 모두 찾음. 거꾸로 a,b,c가 하나도 없는것은 제외


2.  [a-e] 

하이픈 - 는 범위를 의미, a-e = abcde 를 의미. 마찬가지로 a,b,c,d,e가 들어간 문자열을 모두 찾음. 거꾸로 없으면 제외

 

3.  [a-zA-Z]

모든 알파벳을 의미, [0-9] : 모든 숫자를 의미, 


4.  ^

거꾸로(NOT)를 의미. 만약 [^abc]를 하면 a,b,c가 들어가지 않은 모든 문자를 찾음


5.  .        

모든문자를 의미, a.b 는 a와 b사이에 있는 모든문자를 의미


6. a[.]b    

의미는 문자열 그자체가 "a.b" 와 매칭되는 것을 찾음. 괄호내부에[.]있으므로,

마침표 문자 그 자체를 의미 (메타정보가 아님)


7.  *        

ca*t 는 a가 0번이상 반복되는 것을 찾음 (c와 t사이)


8.  +       

ca+t 는 a가 1번이상 반복되는 것을 찾음 c + a(1번 이상 반복) + t


9. ca{2}t   

c와 t사이, a가 반드시 2번 반복 


10. ca{2,5}t 

c와 t사이, a가 반드시 2번~5번 연속 나오는 것을 찾음


11. ab?c     

a와 c사이, b가 있어도되고, 없어도 됨

 

아래 VBscript를 이용한 정규표현식 예제 코드. 입맛에 맞게 변경해서 사용.

' []       : []사이의 문자들과 매치, [abc]의미는 문자열에서 a,b,c가 하나라도 들어가면 모두 찾음. 거꾸로 a,b,c가 하나도 없는것은 제외
' [a-e]    : 하이픈 - 는 범위를 의미, a-e = abcde 를 의미. 마찬가지로 a,b,c,d,e가 들어간 문자열을 모두 찾음. 거꾸로 없으면 제외
' [a-zA-Z] : 모든 알파벳을 의미, [0-9] : 모든 숫자를 의미, 
' ^        : 거꾸로(NOT)를 의미. 만약 [^abc]를 하면 a,b,c가 들어가지 않은 모든 문자를 찾음
' .        : 모든문자를 의미, a.b 는 a와 b사이에 있는 모든문자를 의미
' a[.]b    : 의미는 문자열 그자체가 "a.b" 와 매칭되는 것을 찾음. 괄호내부에[.]있으므로, 마침표 문자 그 자체를 의미 (메타정보가 아님)
' *        : ca*t 는 a가 0번이상 반복되는 것을 찾음 (c와 t사이)
' +        : ca+t 는 a가 1번이상 반복되는 것을 찾음 c + a(1번 이상 반복) + t
' ca{2}t   : c와 t사이, a가 반드시 2번 반복 
' ca{2,5}t : c와 t사이, a가 반드시 2번~5번 연속 나오는 것을 찾음
' ab?c     : a와 c사이, b가 있어도되고, 없어도 됨


' strid = "welcome.user@tutorialspoint.co.us"
strid = "welcome.user#tutorialspoint.co.us"

' 정규표현식 선언을 위한 오브젝트 불러오기
' with문 사용하기
' objRegExp.Pattern
' objRegExp.IgnoreCase <= 원래 이런식으로 써야 하지만, with문을 쓰면 아래와 같이 깔끔하게 가능.

Dim objRegExp : Set objRegExp = new Regexp
With objRegExp
   .Pattern    = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
   .IgnoreCase = False
   .Global     = False
End With

' Test method returns TRUE if a match is found
If objRegExp.Test( strid ) Then
   msgbox(strid & " is a valid e-mail address")
Else
   msgbox(strid & " is NOT a valid e-mail address")
End If

Set objRegExp = Nothing

 

반응형

 

활용 예제 코드.

정규표현식 중간에 특정 문자와 숫자가 들어갈 때 해당 줄(Line) 찾기

https://ansan-survivor.tistory.com/1869

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript), 정규표현식 중간에 특정 문자와 숫자가 들어갈 때

특정 단어(문자)로 시작하는 String을 찾아 중간에 특정 문자와 숫자가 들어갈 때 해당 줄(Line) 찾기 결과) ph 가 들어가는 모든 줄을 출력 숫자는 정수이던 실수이던 모두 출력 그외 나머지는 Not Mat

ansan-survivor.tistory.com

 

정규표현식 특정 문자로 시작할 때 줄 (Line) 찾기

https://ansan-survivor.tistory.com/1868

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript), 정규표현식 특정 문자로 시작할 때 줄 (Line) 찾기

특정 단어(문자)로 시작하는 String을 찾아 해당 단어가 있는 Line만 뽑아서 새로운 Text파일에 줄을 복사함. 결과) ep로 시작하고, nth로 시작하는 항목을 찾아서 해당 줄을 출력 그외 나머지는 Not Matc

ansan-survivor.tistory.com

 

파일에서 특정 문자열 추출하기 (export specific String )

https://ansan-survivor.tistory.com/1867

 

[Visual Basic] 비주얼베이직 스크립트 (VBScript), 파일에서 특정 문자열 추출하기 (export specific String )

어떤 data가 여러개가 섞여있는 데이터에서 특정 단어 String을 찾아 해당 단어가 있는 Line만 뽑아서 새로운 Text파일에 줄을 복사함. 코드 Dim objFSO, objFile Dim strData, strLine 'File System Object 생성 Set objFS

ansan-survivor.tistory.com

 

 

 

 

 

반응형
반응형

특정 단어(문자)로 시작하는 String을 찾아

중간에 특정 문자와 숫자가 들어갈 때 해당 줄(Line) 찾기

 

 

결과)

p<숫자>h<숫자>  가 들어가는 모든 줄을 출력

숫자는 정수이던 실수이던 모두 출력

그외 나머지는 Not Matched

you는 문자이므로 h뒤에 숫자가 아니어서 탈락

 

반응형

 

코드

Dim objFSO, objFile, objRegExp
Dim strData, strLine

'File System Object 생성
Set objFSO = CreateObject("Scripting.FileSystemObject")

'읽기모드로 해당 경로 열기
Set objFile = objFSO.OpenTextFile("C:\_workspace\test.txt", 1)

'text파일의 모든 줄을 읽음
strData = objFile.ReadAll

'파일 닫음
objFile.Close

'추출한 String을 출력할 새 파일을 현재경로에 생성
Set objFile = objFSO.CreateTextFile("result.txt", True)

'정규표현식 object생성
Set objRegExp = New RegExp

'숫자가 정수일때
' objRegExp.Pattern = "p\d+h\d+|P\d+H\d+"

'숫자가 정수 또는 실수일때
objRegExp.Pattern = "p\d*\.?\d+h\d*\.?\d+|P\d*\.?\d+H\d*\.?\d+"

'여러 라인중에 해당 String만 분리
lines = Split(strData, vbNewLine)

'이름을 찾아서 해당 Line을 생성한 Text파일에 쓰기(Write)
For Each strLine in lines

    '해당 패턴이 일치하는지 확인 True? or False?
    If objRegExp.Test(strLine) Then
        objFile.WriteLine(strLine)
    Else
        objFile.WriteLine("Not matched")
    End If
Next

' 파일 닫기
objFile.Close

' 성공을 알림
WScript.Echo "File Exported Successfully!!"

 

 

 

 

 

반응형
반응형

특정 단어(문자)로 시작하는 String을 찾아

해당 단어가 있는 Line만 뽑아서 새로운 Text파일에 줄을 복사함.

 

 

결과)

ep로 시작하고, nth로 시작하는 항목을 찾아서 해당 줄을 출력

그외 나머지는 Not Matched

 

코드

Dim objFSO, objFile, objRegExp
Dim strData, strLine

'File System Object 생성
Set objFSO = CreateObject("Scripting.FileSystemObject")

'읽기모드로 해당 경로 열기
Set objFile = objFSO.OpenTextFile("C:\_workspace\test.txt", 1)

'text파일의 모든 줄을 읽음
strData = objFile.ReadAll

'파일 닫음
objFile.Close

'추출한 String을 출력할 새 파일을 현재경로에 생성
Set objFile = objFSO.CreateTextFile("result.txt", True)

'정규표현식 object생성
Set objRegExp = New RegExp

' 글자 "ep~~"로 시작하는 놈들, "nth~~"로 시작하는 놈들
' ^는 Start를 의미해서 뒤에 따라오는 글자로 시작하는 놈들을 의미
' |는 Or같은 역할 (하나면 |를 없애고 하나만 하면됨.)
objRegExp.Pattern = "^ep|^nth"

'여러 라인중에 해당 String만 분리
lines = Split(strData, vbNewLine)

'이름을 찾아서 해당 Line을 생성한 Text파일에 쓰기(Write)
For Each strLine in lines
    '해당 패턴이 일치하는지 확인 True? or False?
    If objRegExp.Test(strLine) Then
    	' 맞다면 해당 line을 출력 틀리면 Not Matched 출력
        objFile.WriteLine(strLine)
    Else
        objFile.WriteLine("Not matched")
    End If
Next

' 파일 닫기
objFile.Close

' 성공을 알림
WScript.Echo "File Exported Successfully!!"

 

반응형

 

 

만약 특정 문자를 찾고 해당 Line만 남기고 나머지(Space, 줄바꿈 Carriage Return 등)을 몽땅 제거하고 싶다면, 아래코드.

 

코드)

Dim objFSO, objFile, objRegExp
Dim strData, strLine

'File System Object 생성
Set objFSO = CreateObject("Scripting.FileSystemObject")

'읽기모드로 해당 경로 열기
Set objFile = objFSO.OpenTextFile(".\3DBatchDRC.txt", 1)

'text파일의 모든 줄을 읽음
strData = objFile.ReadAll

'파일 닫음
objFile.Close

'추출한 String을 출력할 새 파일을 현재경로에 생성
Set objFile = objFSO.CreateTextFile("result.txt", True)

'정규표현식 object생성
Set objRegExp = New RegExp

' 글자 "ep~~"로 시작하는 놈들, "nth~~"로 시작하는 놈들
' ^는 Start를 의미해서 뒤에 따라오는 글자로 시작하는 놈들을 의미
' |는 Or같은 역할 (하나면 |를 없애고 하나만 하면됨.)
objRegExp.Pattern = "^Component|^   Error:"

'여러 라인중에 해당 String만 분리
lines = Split(strData, vbNewLine)

'이름을 찾아서 해당 Line을 생성한 Text파일에 쓰기(Write)
'공백까지 모두 제거하여 위로 밀기.
For Each strLine in lines
   strLine = Replace(strLine, vbCr, "") ' Remove carriage return
   strLine = Replace(strLine, vbLf, "") ' Remove line feed
   If strLine <> "" Then
       If objRegExp.Test(strLine) Then
           objFile.Write strLine & vbCrLf ' Write with a new line
       End If
   End If
Next


' 파일 닫기
objFile.Close

' 성공을 알림
WScript.Echo "File Exported Successfully!!"

 

 

 

 

 

 

 

 

 

반응형
반응형

 

어떤 data가 여러개가 섞여있는 데이터에서

특정 단어 String을 찾아 해당 단어가 있는 Line만 뽑아서 새로운 Text파일에 줄을 복사함.

 

 

코드

Dim objFSO, objFile
Dim strData, strLine

'File System Object 생성
Set objFSO = CreateObject("Scripting.FileSystemObject")

'읽기모드로 해당 경로 열기
Set objFile = objFSO.OpenTextFile("C:\_workspace\test.txt", 1)

'text파일의 모든 줄을 읽음
strData = objFile.ReadAll

'파일 닫음
objFile.Close

'추출한 String을 출력할 새 파일을 현재경로에 생성
Set objFile = objFSO.CreateTextFile("exported_strings.txt", True)

'여러 라인중에 해당 String만 분리
lines = Split(strData, vbNewLine)

'PADSTACK 이라는 이름을 찾아서 해당 Line을 생성한 Text파일에 쓰기(Write)
For Each strLine in lines
    '라인에 "PADSTACK"이라는 이름이 있는지 찾음.
    If InStr(strLine, "PADSTACK") Then
        '파일에 씀
        objFile.WriteLine(strLine)
    End If
Next

'파일 닫음
objFile.Close

'성공 메세지를 알림
WScript.Echo "File Exported Successfully!!"

 

반응형

 

결과)

복잡하게 얽혀있는 Text중에 특정 단어 ex) PADSTACK이란 단어가 있으면 해당 줄을 출력해서 exported_strings.txt 파일로 출력해준다.

 

 

 

 

 

반응형
반응형

아래 코드를 입력하면 User에게 입력을 받는 Inputbox가 생성된다.

 

InputBox는 3가지의 인자를 받는다.

형태는 :

결과저장변수 = InputBox(User에게 입력유도 메세지, 해당 창 이름, (option) Default 입력 값)

 

예)
 
Dim sOutput 
sOutput = InputBox("put msg here", "Test Box", "default value")

실행 결과

그러면 입력값이 sOutput에 저장됨

 

 

 

반응형
12345

+ Recent posts