오토핫키에서 값을 저장하고 불러오는 목적으로 .ini 파일을 사용할 수 있습니다

근데 단점은 너무 느리다는거죠, IniWrite으로 값을 저장할때 ~10개정도까지는 그렇다해도 양이 늘어나면 많이 느리다는걸 느끼실꺼에요

또한, 문법이 길고 FileName을 계속 지정해줘야 한다는 귀찮은 문제도 있겠네요

 

이러한 기존 Ini의 문제를 해결하고자 Verdlin 이 새로운 클래스를 만들어냈었습니다, 바로 Easyini

벤치마킹의 결과를 보시면 알겠지만, 기존 IniWrite 보다 1162% 더 빠릅니다

5만개의 값을 저장하는데 Easyini 클래스는 21초, IniWrite 은 4분 4초가 걸립니다

{
 iAhkPID := DllCall("GetCurrentProcessId")
 Process, Priority, iAhkPID, H
 
 vIni := class_EasyIni("test.ini")
 
 Loop 50000
 {
  if (!vIni.AddSection(A_Index, A_Index, A_Index, sError))
   sErrors .= sError "`n"
 } ; ~ 1초
 
 vIni.Save() ; ~ 20초
 
 Loop 50000
  IniWrite, %A_Index%, IniWrite.ini, %A_Index%, %A_Index%
 ; ~ 4분 4초
 return
}

 

또한 커스텀 클래스덕분에 네이티브 오브젝트처럼 접근해 사용할 수 있습니다

 

Easyini 다운로드 \Lib 폴더에 저장하거나 #include 하세요

class_EasyIni.ahk

 

문법

; ini 오브젝트를 생성,설정하기
vIni := class_EasyIni("파일명.ini")
 
; 어레이(배열)로 받고싶을때
for section, aKeysAndVals in vIni
   for key, val in aKeysInVals
      vIni[Section][key] := 1
 

; 배열로 ini 값을 가져올때 (ini 파일을 파싱할때)
vIni[SectionName을 변수로 받음][KeyName을 변수로받음] := 값

 

; 가장 일반적인 방법, 기존 ini 문법하고 비슷하죠?
vIni.Section이름.Key이름:= 값

vIni.Section이름[Key이름 변수로받음] := 값

vIni[Section이름 변수로받음].Key이름:= 값

 

예제

MyName := "예지력"

 

; ini 파일 오브젝트 생성하기
vIni := class_EasyIni("TEST.ini")

 

vIni.Section1["키이름1"] := "설정값1"

vIni.Section1["키이름2"] := "설정값2"

 

vIni.Section2["키이름1"] := "설정값1"
vIni.Section2["키이름2"] := "설정값2"

 

vIni.Section3["이름"] := MyName

 

; 저장하기 - 스크립트 경로에서 'TEST.ini' 파일이 생성됨
vIni.Save()

 

; 확인 목적으로 ini 파일 열기
try
 Run, TEST.ini
return

  1. 요시 2015.10.21 17:58 신고

    IniWrite,%제목%,검색순위.ini,제목,제목%ANum%
    이걸 문법으로 바꾸면 어떻게 될까요?
    테스트 해보는데 잘 안되네요.

  2. 요시 2015.10.22 01:12 신고

    예제를 보고 여러 방법으로 해보고 있는데 저장이 잘 안되서요.

    • BlogIcon 예지력 2015.10.22 01:36 신고

      라이브러리 파일 추가하고 예제 실행하신거맞으시죠?
      저장은 오브젝트.Save() 로 끝내야합니다

  3. 요시 2015.10.22 01:56 신고

    시작할때
    vIni := class_EasyIni("TEST.ini")
    vIni.제목[제목"ANum"] :=제목
    vIni.Save()
    이런식인가로 했었는데 저장이 안되더라고요.

    • BlogIcon 예지력 2015.10.22 03:20 신고

      value 로 들어가는 제목 이라는 변수에 값이 없으니까요....
      예제에서 값 저장하는걸 정말 보셔야겠어요 :)

  4. 요시 2015.10.22 08:23 신고

    이건 예제에서 보고 제가 잘 처리가 안되는 부분만 적은거고요. 실제로는 코드가 길어서 다올리긴 너무 많고 gui 디자인 다 되있고 거기서 리스트 뷰쪽에 제목이 다 들어가있어요. 그래서 lv_gettext로 제목도 다 얻어왔고요.

    • BlogIcon 예지력 2015.10.22 17:40 신고

      그러면 작성하신 코드를 확인해보시죠 :(
      제가 도와드릴 방법이 없습니다

      아래는 원문 Documentation 입니다, 참고하세요

      ; To create an ini object,
      vIni := class_EasyIni("MyIni.ini")

      ; To interface with the object,
      for section, aKeysAndVals in vIni
      for key, val in aKeysInVals
      vIni[Section][key] := 1

      vIni[VariableWithSectionName][VariableWithKeyName] := val ; this is typically used when you are looping through sections and keys
      vIni.NameOfSection.NameOfKey := val ; This syntax is the easiest, but you must know the literal section name and key name to do this.
      ; It is particularly useful for handling user-defined ini variables in your applications with relative ease.
      vIni.NameOfSection[VariableWithKeyName] := val ; This is when you know the literal section name
      vIni[VariableWithSectionName].key := val ; This is when you know the literal key name

  5. 포링 2016.03.30 23:35 신고

    섹션과 섹션사이에 빈줄을 주고싶은데 class_easyini.ahk 어디에 `n을 넣으면 되나요. 알려주세요 예지력님.

    • BlogIcon 예지력 2016.05.04 16:18 신고

      ini 파일을 저장하고 파싱으로 한 줄마다 `n을 추가해보세요.
      빈 섹션 빈 값을 줄 수는 없는 걸로 알고 있습니다?

  6. 오토소장 2016.08.13 15:48 신고

    오호 이 클래스 한번 써봐야겠네용 ㅎ

  7. 궁금이 2017.06.16 16:37 신고

    제가 잘 몰라서 질문 드립니다.
    혹시 이 클래스는 쓰기 기능만 있고 읽기 기능은 없나요? 읽기 기능도 있다면 어떻게 사용 하는지 궁금합니다.
    올려 주신 강의들은 잘 보고 있습니다.
    감사합니다.

+ Recent posts