메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Ini파일 2차원 배열로 관리

데브카페
  • AutoIt에서 INI 파일 데이터를 HashMap처럼 메모리에 저장하고 빠르게 검색하려면, 데이터를 읽어서 메모리에 로드하고, 이를 키-값 구조로 관리하는 것이 필요합니다.
  • AutoIt 자체적으로 HashMap 자료구조를 제공하지 않으므로, 2차원 배열 또는 **딕셔너리(UDF)**로 대체할 수 있습니다.

2차원 배열을 이용한 INI 데이터 관리

  • 이 방법은 간단히 데이터를 메모리에 로드하고 검색할 수 있도록 구현합니다.
#include <Array.au3>

; INI 파일 데이터를 배열로 메모리에 로드
Local $sINIFile = "settings.ini" ; INI 파일 경로
Local $aData = _LoadINIToArray($sINIFile)

; 검색
Local $sValue = _SearchKey($aData, "Username")
If $sValue <> "" Then
    MsgBox(0, "Search Result", "Username: " & $sValue)
Else
    MsgBox(16, "Error", "Key not found!")
EndIf

; 함수: INI 데이터를 배열로 로드
Func _LoadINIToArray($sFile)
    Local $aResult[0][2]
    If Not FileExists($sFile) Then Return $aResult

    Local $sContent = FileRead($sFile)
    Local $aLines = StringSplit($sContent, @CRLF, 1)
    For $i = 1 To $aLines[0]
        Local $aKeyValue = StringSplit($aLines[$i], "=")
        If $aKeyValue[0] = 2 Then
            ReDim $aResult[UBound($aResult) + 1][2]
            $aResult[UBound($aResult) - 1][0] = $aKeyValue[1]
            $aResult[UBound($aResult) - 1][1] = $aKeyValue[2]
        EndIf
    Next
    Return $aResult
EndFunc

; 함수: 배열에서 키 검색
Func _SearchKey(ByRef $aArray, $sKey)
    For $i = 0 To UBound($aArray) - 1
        If $aArray[$i][0] = $sKey Then
            Return $aArray[$i][1]
        EndIf
    Next
    Return ""
EndFunc

{{틀:요약 1. _LoadINIToArray: • INI 파일 데이터를 읽어서 [키][값] 구조의 2차원 배열에 저장합니다. • 배열은 메모리에 유지되어 검색이 빠릅니다.

2. _SearchKey: • 배열에서 특정 키를 검색하고, 해당 키의 값을 반환합니다.

3. 실행 예제: • settings.ini 파일의 내용이 다음과 같다고 가정:

Username=User1 Theme=Dark AutoSave=true


• 검색 결과: "Username: User1"이 출력됩니다. }}

딕셔너리(UDF)를 사용한 INI 데이터 관리

  • 딕셔너리를 사용하면 키-값 쌍을 더 직관적으로 관리할 수 있습니다. AutoIt에서 딕셔너리를 사용하려면 UDF를 사용해야 합니다.
#include "Dictionary.au3" ; Dictionary UDF 필요 (https://www.autoitscript.com/forum/topic/123636-dictionary-udf/)

; 딕셔너리 생성
Local $oDict = _DictCreate()

; INI 파일 데이터를 딕셔너리에 로드
Local $sINIFile = "settings.ini"
_LoadINIToDict($sINIFile, $oDict)

; 검색
Local $sValue = _DictGet($oDict, "Username")
If Not @error Then
    MsgBox(0, "Search Result", "Username: " & $sValue)
Else
    MsgBox(16, "Error", "Key not found!")
EndIf

; 함수: INI 데이터를 딕셔너리에 로드
Func _LoadINIToDict($sFile, ByRef $oDict)
    If Not FileExists($sFile) Then Return
    Local $sContent = FileRead($sFile)
    Local $aLines = StringSplit($sContent, @CRLF, 1)
    For $i = 1 To $aLines[0]
        Local $aKeyValue = StringSplit($aLines[$i], "=")
        If $aKeyValue[0] = 2 Then
            _DictAdd($oDict, $aKeyValue[1], $aKeyValue[2])
        EndIf
    Next
EndFunc

{{틀:요약 1. Dictionary UDF: • Dictionary.au3 라이브러리를 추가하여 딕셔너리를 사용합니다. • https://www.autoitscript.com/forum/topic/123636-dictionary-udf/에서 다운로드 가능합니다.

2. _LoadINIToDict: • INI 파일 데이터를 키-값 쌍으로 딕셔너리에 저장합니다. 3. _DictGet: • 키를 검색하고 값을 반환합니다. 키가 없으면 오류를 반환합니다. </source>

SQLite 데이터베이스를 활용

  • INI 데이터를 SQLite 데이터베이스에 로드하여 효율적으로 관리할 수도 있습니다.
#include <SQLite.au3>
#include <SQLite.dll.au3>

; SQLite 초기화
_SQLite_Startup()
Local $hDB = _SQLite_Open(":memory:")

; 테이블 생성 및 데이터 삽입
_SQLite_Exec($hDB, "CREATE TABLE Settings (Key TEXT PRIMARY KEY, Value TEXT)")
_SQLite_Exec($hDB, "INSERT INTO Settings (Key, Value) VALUES ('Username', 'User1')")
_SQLite_Exec($hDB, "INSERT INTO Settings (Key, Value) VALUES ('Theme', 'Dark')")

; 데이터 검색
Local $hQuery, $sValue
_SQLite_Query($hDB, "SELECT Value FROM Settings WHERE Key = 'Username'", $hQuery)
If _SQLite_FetchData($hQuery, $sValue) Then
    MsgBox(0, "Search Result", "Username: " & $sValue)
Else
    MsgBox(16, "Error", "Key not found!")
EndIf
_SQLite_CloseQuery($hQuery)

; 종료
_SQLite_Close($hDB)
_SQLite_Shutdown()

{{틀:요약

  • 간단한 데이터:
    • 2차원 배열 또는 딕셔너리 사용.
  • 복잡한 구조화 데이터:
    • SQLite 데이터베이스 사용.

}}

Comments