' 파일명: RunWithArguments.vbs
' 사용법: cscript RunWithArguments.vbs arg1 arg2 ...
' 커맨드 라인 인수를 가져오기
Set objArgs = WScript.Arguments
' 인수가 적어도 하나 이상인지 확인
If objArgs.Count < 1 Then
WScript.Echo "How to use: cscript RunWithArguments.vbs arg1 arg2 ..."
WScript.Quit
End If
' 인수 출력
WScript.Echo "how many args get? " & objArgs.Count
WScript.Echo "args lists:"
' 모든 인수 출력
For i = 0 To objArgs.Count - 1
WScript.Echo "list " & (i + 1) & ": " & objArgs(i)
Next
' 여기에 인수를 활용한 로직 추가
' 예를 들어, 전달받은 인수를 이용하여 다른 프로그램을 실행하는 등의 동작 수행 가능
' 예시: Notepad 실행
Set objShell = WScript.CreateObject("WScript.Shell")
'objShell.Run "notepad.exe", 1, True
Option Explicit
Dim strIPAddress, objShell, objExec, strPingResults
' 테스트할 IP 주소 (성공 케이스)
strIPAddress = "8.8.8.8"
' 테스트할 IP 주소 (실패 케이스)
'strIPAddress = "8.8.8.9"
' WScript.Shell 개체 생성
Set objShell = WScript.CreateObject("WScript.Shell")
' Ping 실행 및 결과 얻기,
' -w 1000 : timeout 1초
' -n 3은 3번의 패킷을 보내도록 지정
Set objExec = objShell.Exec("ping -n 3 -w 1000 " & strIPAddress)
' 결과 읽기
strPingResults = objExec.StdOut.ReadAll()
' 결과 출력
msgbox "Ping Result: " & strPingResults
' 결과에서 성공 여부 확인
If InStr(strPingResults, "TTL=") > 0 Then
msgbox "Ping Succeed! Connected to HOST."
Else
msgbox "Ping Failed!. Disconnected to HOST."
End If
' 객체 해제
Set objShell = Nothing
Set objExec = Nothing
' Dictionary object 선언
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
' key-value 등록법
myDictionary.Add "a", Array("1-2", "2-3", "3-4")
myDictionary.Add "b", Array("5-6", "6-7", "7-8")
myDictionary.Add "c", Array("9-10", "10-11", "11-12")
' value호출 방법
msgbox "Value associated with 'a':"
For Each item In myDictionary("a")
msgbox item
Next
msgbox "Value associated with 'b':"
For Each item In myDictionary("b")
msgbox item
Next
msgbox "Value associated with 'c':"
For Each item In myDictionary("c")
msgbox item
Next
그림으로 그려보자면 아래와 같다.
결과 확인
아래와 같은 msgbox가 순서대로 출력된다.
즉 Key값 먼저 출력되고 그 뒤에 value값이 따라서 출력된다.
이를 통해 VBScript에서 어떻게 Dictionary를 쓰고 Key값 호출, Value값 호출을 하는지 보고 수정해서 쓰면된다.
위 예문에서는 For Each문을 통해 한꺼번에 모두다 출력하도록 했지만, 만약 List 내부의 특정 값에 접근하고 싶다면 아래와 같이 접근한다.
' Create a new Dictionary object
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
' Add key-value pairs to the dictionary
myDictionary.Add "a", Array("1-2", "2-3", "3-4")
' Access the first item in the array associated with "a" key
Dim firstItem
firstItem = myDictionary("a")(0)
' Display the first item using MsgBox
MsgBox "First item associated with 'a' key: " & firstItem
(결과)
* 만약에 생성한 "a" Dictionary에 있는 Array에 추가로 값을 더 넣고 싶다면 아래 샘플 코드...
->
이 코드에서는 existingArray 변수에 "a" 키에 연결된 배열을 가져와서, 새로운 값을 추가하려는 newArray와 결합하여 combinedArray에 저장합니다.
그런 다음 "a" 키에 새로운 combinedArray를 할당합니다. 이렇게 하면 오류 없이 값을 추가할 수 있습니다.
' Create a new Dictionary object
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
' Add key-value pairs to the dictionary
myDictionary.Add "a", Array("1-2", "2-3", "3-4")
' Access the first item in the array associated with "a" key
Dim firstItem
firstItem = myDictionary("a")(0)
' Get the existing array associated with "a" key
existingArray = myDictionary("a")
' Create a new array with additional values
Dim newArray
newArray = Array("apple", "banana", "orange")
' Combine the existing and new arrays
ReDim combinedArray(UBound(existingArray) + UBound(newArray) + 1)
Dim i
For i = 0 To UBound(existingArray)
combinedArray(i) = existingArray(i)
Next
For i = UBound(existingArray) + 1 To UBound(existingArray) + UBound(newArray) + 1
combinedArray(i) = newArray(i - UBound(existingArray) - 1)
Next
' Update the "a" key in the dictionary with the combined array
myDictionary("a") = combinedArray
' Output verification
MsgBox "Values associated with 'a':"
For Each item In myDictionary("a")
MsgBox item
Next
이렇게 하면 coordinatesList 컬렉션에 각각의 좌표를 표현하는 배열이 추가됩니다.
각 배열은 2개의 요소를 가지며, 첫 번째 요소는 x 좌표이고 두 번째 요소는 y 좌표입니다. 이러한 구조를 활용하여 데이터를 저장하고 처리할 수 있습니다.
반응형
coordinatesList.Add가 파이썬의 append와 같은 기능을 한다.
coordinatesList.Add 메서드는 일종의 "추가" 작업을 수행하며, 리스트나 컬렉션에 새로운 항목을 마지막에 추가합니다. 이것은 많은 프로그래밍 언어에서의 "append" 작업과 유사한 역할을 합니다. 새로운 항목이 리스트의 끝에 추가되므로 리스트의 크기가 동적으로 증가할 수 있습니다.
따라서 coordinatesList.Add를 사용하여 컬렉션에 새 항목을 추가하는 것은 데이터를 리스트나 컬렉션에 덧붙이는 작업이라고 볼 수 있습니다.
Array()는 Dim선언이 필요하지 않다.
Array()는 VBScript 내장 함수로, 배열을 생성하고 초기화하는 데 사용됩니다.
이 함수를 사용할 때는 Dim 선언이 필요하지 않습니다.
Array() 함수를 사용하면 배열을 선언과 동시에 초기화할 수 있습니다.
예를 들어, 다음과 같이 Array() 함수를 사용하여 배열을 생성하고 초기화할 수 있습니다.
필요없는 문자열들 예를들면 mm나 : 등등 모두 null으로 변경 시키기 (Replace 함수)
최종적으로 , 콤마를 기준으로 데이터만 출력하는 파일을 생성.
샘플 스크립트
여기서 쪼개진 splitedLine 은 Array 타입이다.
Dim import, export
import = "스페이스바로 분리시킬 파일.txt"
export = "결과 출력파일 이름.txt"
Call ExtractComponentInfo(import, export)
Function ExtractComponentInfo(inputFile, outputFile)
Dim objFSO, objFileIn, objFileOut
Dim strLine, splitedLine
Dim comp1, comp2, dist, minz
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileIn = objFSO.OpenTextFile(inputFile, 1)
Set objFileOut = objFSO.CreateTextFile(outputFile, True)
Do Until objFileIn.AtEndOfStream
strLine = objFileIn.ReadLine()
splitedLine = Split(strLine, " ")
' UBound(splitedLine) 배열의 크기가 4인지 확인 (0~4 까지 총 5개가 들어있는 배열)
If UBound(splitedLine) = 4 Then
comp1 = splitedLine(1)
comp2 = Replace(splitedLine(4), ":", "")
End If
If UBound(splitedLine) > 4 Then
dist = Replace(Replace(splitedLine(9), "mm", ""), ",", "")
minz = Replace(splitedLine(13), "mm", "")
objFileOut.WriteLine comp1 & "," & comp2 & "," & dist & "," & minz
End If
Loop
objFileIn.Close
objFileOut.Close
Set objFileIn = Nothing
Set objFileOut = Nothing
Set objFSO = Nothing
End Function
Split을 이용해 comma를 기준으로 각 항목을 잘라서 List으로 저장하여 2차 배열 (Array)으로 내보낸다.
반응형
함수로 return하여 새로운 변수 ColLines에 담았다.
이 ColLines는 각 줄의 정보가 하나씩 담겨있고 (1차 배열)
위와같이 For Each으로 3개의 줄을 하나씩 나눠서 또 data(0), data(1), data(2), data(3) 으로 각각의 값을 확인할 수 있다.
코드
Function readFilereturnLineList(file_path)
Dim fso, inputFile, line, lines, data
' 파일 시스템 객체 생성
Set fso = CreateObject("Scripting.FileSystemObject")
' 입력 파일 열기
Set inputFile = fso.OpenTextFile(file_path, 1)
' 파일 내 각 줄을 읽어서 리스트에 추가합니다
Do Until inputFile.AtEndOfStream
line = inputFile.ReadLine()
If Len(Trim(line)) > 0 Then
lines = lines & line & vbCrLf
End If
Loop
' 각 줄을 하나의 리스트로 만듭니다
data = Split(lines, vbCrLf)
For i = 0 To UBound(data)
data(i) = Split(data(i), ",")
Next
' 결과 리스트를 반환합니다
readFilereturnLineList = data
' 파일 닫기
inputFile.Close
End Function
Dim colLines, data
colLines = readFilereturnLineList("output.txt")
For Each data In colLines
If UBound(data) >= 0 Then
MsgBox data(0)
MsgBox data(1)
MsgBox data(2)
MsgBox data(3)
End If
Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.FileExists("C:\example\file.txt")
If objFile = True Then
WScript.Echo "파일이 존재합니다."
Else
WScript.Echo "파일이 존재하지 않습니다."
End If