다른 명령
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 50번째 줄: | 50번째 줄: | ||
{{틀:요약 | {{틀:요약 | ||
|제목= | |제목=# _LoadINIToArray: | ||
#:* INI 파일 데이터를 읽어서 [키][값] 구조의 2차원 배열에 저장합니다. | |||
#:* 배열은 메모리에 유지되어 검색이 빠릅니다. | |||
# _SearchKey: | |||
#:* 배열에서 특정 키를 검색하고, 해당 키의 값을 반환합니다. | |||
# 실행 예제: | |||
#:*settings.ini 파일의 내용이 다음과 같다고 가정: | |||
Username=User1 | Username=User1 | ||
| 65번째 줄: | 62번째 줄: | ||
AutoSave=true | AutoSave=true | ||
* 검색 결과: "Username: User1"이 출력됩니다. | |||
}} | }} | ||
| 147번째 줄: | 143번째 줄: | ||
{{틀:요약 | {{틀:요약 | ||
|제목= | |제목=* 간단한 데이터: | ||
* 간단한 데이터: | |||
** 2차원 배열 또는 딕셔너리 사용. | ** 2차원 배열 또는 딕셔너리 사용. | ||
* 복잡한 구조화 데이터: | * 복잡한 구조화 데이터: | ||
2025년 7월 24일 (목) 09:36 기준 최신판
- 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
list_alt# _LoadINIToArray:
- INI 파일 데이터를 읽어서 [키][값] 구조의 2차원 배열에 저장합니다.
- 배열은 메모리에 유지되어 검색이 빠릅니다.
- _SearchKey:
- 배열에서 특정 키를 검색하고, 해당 키의 값을 반환합니다.
- 실행 예제:
- 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
list_alt1. Dictionary UDF:
• Dictionary.au3 라이브러리를 추가하여 딕셔너리를 사용합니다. • https://www.autoitscript.com/forum/topic/123636-dictionary-udf/에서 다운로드 가능합니다.
2. _LoadINIToDict: • INI 파일 데이터를 키-값 쌍으로 딕셔너리에 저장합니다. 3. _DictGet: • 키를 검색하고 값을 반환합니다. 키가 없으면 오류를 반환합니다.
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()
list_alt* 간단한 데이터:
- 2차원 배열 또는 딕셔너리 사용.
- 복잡한 구조화 데이터:
- SQLite 데이터베이스 사용.