컴퓨터2007.11.14 10:02
Scripting.Dictionary
 
데이터베이스를 사용하지 않고 원하는 데이터를 뽑아서 사용하기란 쉽지가 않습니다.
파일로 저장을 해서 읽어오고 저장하고 정리하고 읽어오고 저장하고 읽어오고 저장하고...

물론 배열로 만들면 기준이 되는 데이터를 처음부터 끝까지 반복해서 비교하면 원하는 결과가
나오기는 합니다.

하지만 데이터가 많이지고, 배열을 재정의하는 부분이 중간에라도 나온다면, 나중에 그 코드를 볼때의
느낌은 정말.. 깜깜합니다.
( 제가 만든것을 봐도 제가 하나하나 값을 찍어보고 구조를 판단해야 하더군요. 제가 요즘 부쩍
단기기억력상실이 심해져서요. )
 
우선 배열과 차이점을 꼽아보면 몇가지가 나옵니다.
1. 데이터의 검색 및 추가, 수정, 삭제가 쉽다.
2. 사용법이 간단하다.
3. 모든 데이터를 넣어 사용할수 있다.
  ( 배열조차 넣어서 사용할수 있습니다. 같은 Scripting.Dictionary 조차 넣어서 사용할수 있습니다.)
 
저는 배열의 대용으로 사용을 합니다.
왜냐하면 검색하기 위해 따로 함수를 만들지 않아도 되고, 정렬도 가능해서 여러모로 활용도가
높기 때문입니다.
 
 
다음과 같은 설정값을 가집니다.
속성
- Count : 현재 저장된 개체의 갯수를 반환합니다.
- Item("KeyValue") : KeyValue 라는 키를 이용해서 할당되어 있는 값을 반환합니다.
       키에 값이 없을경우 Null 값을 반환합니다.
- Key("ValueData") : ValueData 라는 값을 가지고 있는 키를 반환합니다.
- CompareMode : Dictionary 개체에서 문자열 키를 비교하는 모드를 설정하여 반환합니다.
 
메서드
- Add Key, Value : 키와 값을 추가합니다. 존재하는 키이면 오류가 발생합니다.
- Remove Key : 지정한 키와 할당되어 있는 키값을 제거합니다. 존재하지 않는 키이면 오류가 발생합니다.
- RemoveAll :  모든 키와 값을 제거합니다.
- Exists(Key) : 지정한 키가 존재하면 True 반환하고, 아니면 False 반환합니다.
- keys : 모든 키들을 배열로 반환합니다.
- Items: 모든 값들을 배열로 반환합니다.
 
 
소스를 보고 설명을 드리겠습니다.
 
'' InsertText   : 입력 되는 키값
' OutputText :  출력 값
1 : Dim objDic
2 : Dim InsertText
3 : Dim OutputText
 
4 : Set objDic =createObject("Scripting.Dictionary")
5 : objDic.Add "Zasfe", "code1"
6 : objDic.Item("Eseit") = "code2"
 
7 : InsertText = "Zasfe"
8 : OutputText = objDic.Item(InsertText)
9 : Wscript.Echo OutputText
10: For each aa in objDic.Keys
11:   wscript.echo aa&" "&objDic.item(aa)
12: Next
 
 
 
가장 간단히 값을 Dictionary개체에 입력하는 방법입니다.
위 코드는 sDic 라는 디렉토리 개체에서 Item값이 "InsertText" 라는 값을 갖는 키값을 반환합니다.
1~3 라인은 변수를 선언하는 부분이고, 4 라인은 Dictionary 개체를 선언하는 부분입니다.
5~6 라인은 Dictionary 개체에 값을 넣는 부분입니다. 2가지의 방법으로 가능합니다.
메서드를 이용한방법(5 라인)과 속성을 이용한 방법(6 라인)이다.
7~9 라인은 Key 값이 "Zasfe" 인 Item 값을 출력하는 부분입니다.
10~12 라인은 모든 키값을 배열로 받아와서 출력하는 방법입니다. 주로 어떤 값이 들어있는지 확인하는 방법으로
사용됩니다.

사용법은 생각보다 간단합니다.

다음은 위 코드의 실행결과 입니다.

Posted by Zasfe
컴퓨터2007.05.18 10:09

배열은 동일한 성격의 데이터들을 관리하기 쉽도록 하나로 묶은 집합변수 입니다.
< 엠파스 IT사전 중... >

데이터의 집합이기때문에 문자열로 된 데이터( 가나, 다라, 마바... )와 숫자로된
 데이터 ( 1,2,3,4,5....)를 가질수도 있습니다. 또한 다차원을 가진 배열도 만들수 있죠.

' 자빠진김에 쉬어간다고' 말이 나왔으니 차원에 대해서 알아보겠습니다.
1차원은 입니다. 모든 값은 한개씩의 데이터로 묶여있는 집합이고,
2차원은 입니다. 두가지 종류의 값이 묶어있는 집합이죠.
3차원은 공간입니다. 세가지 종류의 값이 만나 이루는 집합입니다.


0차원 점, 1차원 선분, 2차원 사각형, 3차원 정육면체와
4차원 초입방체를 2차원으로 표현한 그림 - 위키백과사전

다시 말하면, 국어의 문장과도 비슷합니다.
1차원은 다음과 같습니다.
1. aaaaa
2. bbbbb
3. ccccc
...

2차원은 다음과 같습니다.
1.1 ddddd
1.2 eeeee
2.1 ggggg
2.2 hhhhh

3차원은 다음과 같습니다.
1.1.1 kkkkk
1.1.2 LLLL
1.2.1 mmmm
1.2.2 nnnn
2.1.1 oooo
2.1.2 pppp
2.2.1 qqqq
2.2.2 RRRR

차이를 아시겠습니까?

3차원은 잘 모르시겠다구요.. 지금은 1차원만 아셔도 됩니다.
알아가실수록 점차 더 많은 차원의 배열을 사용하는 자신을 보게 될테니까요. ^^

자 그럼 이제 연습을 해봅시다.

array01.vbsDim array_String(2)

array_String(0)="가나"
array_String(1)="다라"
array_String(2)="마바"

wscript.echo array_String(0)
wscript.echo array_String(1)
wscript.echo array_String(2)


실행을 하면 다음과 같은 결과가 나오게 됩니다.


왜 그럴까요..

그렇습니다. 배열(집합변수)에 값을 직접 넣고, 그 값을 출력을 한것입니다.


배열에 값을 넣는 방법은 2가지가 있습니다.
방금전의 스크립트처럼 직접 하나하나 값을 추가하는 방법이 있고,
배열로 할당되어 있는 값을 한꺼번에 입력하는 방법이 있습니다.
한꺼번에 입력하는 방법은 바로전 배열 스크립트에서 사용을 하였습니다.

array00.vbsConst CONVERSION_FACTOR = 1048576
computer = "mysonnet" ' 컴퓨터의 이름 입력
Set objWMIService = GetObject("winmgmts://" & computer )  ' WMI 를 이용합니다.
Set colLogicalDisk = objWMIService.InstancesOf("Win32_LogicalDisk")
    ' 전체내용을 가져옵니다.
For Each objLogicalDisk In colLogicalDisk  
    ' 전체내용중 하나하나씩의 값을 가져옵니다.
    FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
    ' 남은 공간을 MegaByte 단위로 환산합니다.
    Wscript.Echo objLogicalDisk.DeviceID & " " & Int(FreeMegaBytes)
    ' 드라이브명(DeviceID) 을 가져옵니다.
Next

-- 결과

Posted by Zasfe
컴퓨터2007.05.05 05:59

우선 이번에 배울 스크립트부터 보겠습니다.

㉠ Const CONVERSION_FACTOR = 1048576
㉡ Set objWMIService = GetObject("winmgmts:")
㉢ Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='C:'")
㉣ FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
㉤ wscript.echo Int(FreeMegaBytes)

많이 보던 스크립트 같습니다.. 그렇습니다.. 바로 전에 써먹은 그 남은용량 알아보는
스크립트 입니다. 이해를 돕고자.. 절대 재탕은 아닙니다.. 쿨럭..;;;;

㉠ 부분은 무엇을 의미할까요..
바로 변경을 할수없는 상수를 의미합니다. ( 상수 맞나..;; 언어의 장벽이.. 쿨럭..;;)

이 스크립트는 남은 용량을 MByte 단위로 환산을 하여서 출력하는 것입니다.
바로전에는 직접 나눗셈을 했었죠.
바로전 스크립트와 차이는 없습니다. 다만 상수를 이용해서 값을 먼저 지정하고
사용을 하는이 다를 뿐이죠.

그리고, ㉤ 에보면 Int(변수) 이런 값이 있는데,
Int형(정수)으로 형변환을 시키는 것입니다. 원래 소스점까지 나오는것을 정수부분만
출력하라는 이야기인거죠.

다음은 결과입니다.

G:\Data\Script\tmp\VBS>cscript Win32_LogicalDisk.vbs
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

1095

G:\Data\Script\tmp\VBS>

Posted by Zasfe
컴퓨터2007.05.03 10:30

혼자 공부하기는 쉬워도 그것을 글로 다시 쓰려니 참.. 힘드네요.

우선 간단 스크립트 하나를 설명을 하겠습니다.

다음 스크립트는 C드라이브의 남은공간을 알아내는 스크립트 입니다.
사용되는 기술은 VBscript, WMI 입니다.

㉠ Set objWMIService = GetObject("winmgmts:")
㉡ Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='C:'")
㉢ Wscript.Echo objLogicalDisk.FreeSpace



㉠ WMI 를 이용해야 하기때문에 WMI 의 개체로부터 데이터를 가져와서
   objWMIService라는 개체에 값을 넣습니다.

㉡ WMI 에서 가져온 개체는 하나의 값을 갖지 않고 여러값을 가진 뭉탱이이기때문에
 많은 내용들중에서 우리가 알고자하는 디스크정보를 가지고 있는 개체를 호출하는데,
이때 특정 드라이브(C:\) 를 지정해서 값을 objLogicalDisk 로 가져오게 됩니다.

㉢ 젤 쉬운 부분입니다. objLogicalDisk  개체에 대한 남은 공간에 해당하는 값을 얻게 되는것이죠.

결과는 다음과 같습니다.

G:\Data\Script\tmp\VBS>cscript Win32_LogicalDisk.vbs
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

1186295808

G:\Data\Script\tmp\VBS>



와우 간단하죠?  그런데 값을 보니 너무 크군요.. 저의 C드라이브가 얼마나 용량이 남았는지
바로 감이 안옵니다. 사실 이값은 byte 입니다. 보기 쉬운 방법으로 바꾸어 보겠습니다.

㉢ 부분을 약간 수정하겠습니다.
다음처럼요. (참고, 1024 byte = 1KByte , 1024 KByte = 1 MByte, 1024 MByte = 1 Gbyte)

Wscript.Echo objLogicalDisk.FreeSpace / 1024
Wscript.Echo objLogicalDisk.FreeSpace / 1024 / 1024
Wscript.Echo objLogicalDisk.FreeSpace / 1024 / 1024 / 1024



결과를 보겠습니다.

G:\Data\Script\tmp\VBS>cscript Win32_LogicalDisk.vbs
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

1158460
1131.30859375
1.10479354858398

G:\Data\Script\tmp\VBS>

단위 표시를 안했더니 보기가 불편하네요.

다음은 제 C디스크 정보입니다.




어렵지 않죠..? ^^

Posted by Zasfe
컴퓨터2007.04.01 14:32

VBscript 는 윈도우기반의 컴퓨터를 관리하기에 강력하고 쉽고 유용한 도구입니다.

간단한 스크립트 하나를 이용해서 여러가지 작업이 가능하도록 수정을 해서 여러분이 사용하시는데
무한한 가능성이 보이도록 할것입니다.

우선 우리의 입맛에 맛도록 수정을 할 간단한 스크립트 하나를 소개합니다.

Set objWMIService = GetObject("winmgmts:")
Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='C:'")
Wscript.Echo objLogicalDisk.FreeSpace



이 스크립트는 WMI 를 이용해서 로컬디스크중 C 드라이브의 남은 공간을 알아보는 스크립트입니다.

우리는 외부의 컴퓨터를 포함한 당신의 네트워크내의 모든 컴퓨터에 대한 디스크 남은 공간을 알아볼수도 있으며, 여러대의 컴퓨터의 남은공간정보를 알아볼수도 있으며, 하나의 컴퓨터에 대해서 모든 디스크 남은공간을 알아볼수도 있으며. 디스크정보에 대한 경고를 할수도 있다.

하나하나 알아보자

Posted by Zasfe