문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자.
== Ini 파일 읽어서 2차원 배열로 저장 == * AutoIt에서 INI 파일을 읽어서 섹션과 키를 포함하는 2차원 배열을 만드는 방법 <source lang=autoit> #include <Array.au3> ; 배열 관련 함수 Func _ReadIniToArray($sFilePath) Local $aIniData[1][2] ; 초기 2차원 배열 선언 (나중에 ReDim으로 확장) ; $aIniData[0][0] = 섹션, $aIniData[0][1] = 키 (샘플 초기값) Local $iIndex = 0 If Not FileExists($sFilePath) Then ConsoleWrite("오류: '" & $sFilePath & "' 파일을 찾을 수 없습니다." & @CRLF) Return SetError(1, 0, "") EndIf ; INI 파일을 한 줄씩 읽습니다. Local $hFile = FileOpen($sFilePath, 0) ; 0 = 읽기 모드 If $hFile = -1 Then ConsoleWrite("오류: '" & $sFilePath & "' 파일을 열 수 없습니다." & @CRLF) Return SetError(2, 0, "") EndIf Local $sCurrentSection = "" While Not FileReadEOF($hFile) Local $sLine = StringStripWS(FileReadLine($hFile), 3) ; 공백 제거 If StringLeft($sLine, 1) = "[" And StringRight($sLine, 1) = "]" Then ; 섹션 발견 $sCurrentSection = StringMid($sLine, 2, StringLen($sLine) - 2) $iIndex += 1 ReDim $aIniData[$iIndex + 1][2] ; 배열 크기 확장 $aIniData[$iIndex][0] = $sCurrentSection $aIniData[$iIndex][1] = "" ; 섹션만 있는 경우 키는 비워둡니다. ElseIf StringInStr($sLine, "=") Then ; 키-값 쌍 발견 If $sCurrentSection <> "" Then Local $aKeyValue = StringSplit($sLine, "=", 2) ; 2 = 빈 문자열 포함 안함 If UBound($aKeyValue) = 2 Then $iIndex += 1 ReDim $aIniData[$iIndex + 1][2] ; 배열 크기 확장 $aIniData[$iIndex][0] = $sCurrentSection $aIniData[$iIndex][1] = $aKeyValue[1] ; Note: 값을 포함하려면 $aIniData[$iIndex][2]에 저장하거나 ; 배열의 차원을 3으로 확장해야 합니다. ; 이 예제에서는 섹션과 키만 저장합니다. EndIf EndIf EndIf Wend FileClose($hFile) ; 첫 번째 (0번째) 행은 빈 초기값이므로 제거하거나 조정합니다. ; 여기서는 1부터 유효한 데이터가 시작한다고 가정합니다. ; 만약 0부터 유효한 데이터를 시작하려면 $aIniData[0][0], $aIniData[0][1]부터 채우면 됩니다. ; 이 예제에서는 유효한 데이터를 $aIniData[1][...] 부터 저장합니다. ; 실제 데이터는 1부터 $iIndex까지입니다. ; 필요에 따라 배열의 크기를 조정합니다. ReDim $aIniData[$iIndex + 1][2] ; 실제 데이터가 있는 부분까지만 재조정 (선택 사항) Return $aIniData EndFunc </source> === 사용 예제 === <source lang=autoit> ; 테스트용 INI 파일 생성 (실제 파일로 대체 가능) Local $sIniFile = @ScriptDir & "\MySettings.ini" Local $sContent = "[General]" & @CRLF & _ "Name=AutoIt" & @CRLF & _ "Version=3.3" & @CRLF & _ "" & @CRLF & _ "[Network]" & @CRLF & _ "IPAddress=192.168.1.1" & @CRLF & _ "Port=8080" & @CRLF FileDelete($sIniFile) ; 기존 파일 삭제 (테스트용) FileWrite($sIniFile, $sContent) Local $aResult = _ReadIniToArray($sIniFile) If @error = 0 Then ConsoleWrite("INI 파일 읽기 성공!" & @CRLF) ; 배열 내용 출력 For $i = 1 To UBound($aResult) - 1 ; 1부터 유효한 데이터 시작 ConsoleWrite("섹션: " & $aResult[$i][0] & ", 키: " & $aResult[$i][1] & @CRLF) Next Else ConsoleWrite("INI 파일 읽기 실패. 오류 코드: " & @error & @CRLF) EndIf ; 테스트용 INI 파일 삭제 (선택 사항) ; FileDelete($sIniFile) </source> === 설명 === # _ReadIniToArray($sFilePath) 함수: ## 이 함수는 INI 파일 경로를 인자로 받아 2차원 배열을 반환합니다. ## Local $aIniData[1][2]로 초기 배열을 선언합니다. ReDim을 사용하여 필요한 만큼 동적으로 크기를 확장할 것입니다. ## FileExists($sFilePath)로 파일 존재 여부를 확인합니다. ## FileOpen($sFilePath, 0)으로 파일을 읽기 모드로 엽니다. ## While Not FileReadEOF($hFile) 루프를 사용하여 파일을 한 줄씩 읽습니다. ## StringStripWS($sLine, 3)를 사용하여 각 줄의 앞뒤 공백을 제거합니다. # 섹션 처리: ## If StringLeft($sLine, 1) = "[" And StringRight($sLine, 1) = "]" Then 조건으로 줄이 섹션인지 확인합니다. ## 섹션이면 StringMid($sLine, 2, StringLen($sLine) - 2)를 사용하여 대괄호를 제거하고 섹션 이름을 추출합니다. * ReDim $aIniData[$iIndex + 1][2]를 사용하여 배열의 행을 하나 확장하고, $aIniData[$iIndex][0]에 섹션 이름을 저장합니다. $aIniData[$iIndex][1]은 섹션만 있는 경우를 위해 비워둡니다. * 키-값 쌍 처리: * ElseIf StringInStr($sLine, "=") 조건으로 줄이 키-값 쌍인지 확인합니다. * StringSplit($sLine, "=", 2)를 사용하여 키와 값을 분리합니다. 2는 빈 문자열을 포함하지 않도록 합니다. * UBound($aKeyValue) = 2를 확인하여 키와 값이 모두 제대로 분리되었는지 확인합니다. * ReDim $aIniData[$iIndex + 1][2]로 배열을 확장하고, $aIniData[$iIndex][0]에 현재 섹션 이름, $aIniData[$iIndex][1]에 키 이름을 저장합니다. * 주의: 이 예제에서는 키만 2차원 배열에 저장하고 있습니다. 만약 값도 저장하고 싶다면 배열의 차원을 3으로 확장하거나, 값을 저장할 다른 방법을 고려해야 합니다 (예: _ReadIniToArray 함수 내에서 섹션-키-값 매핑을 위한 맵 또는 연관 배열 사용). * 배열 반환 및 사용 예제: * 함수는 최종적으로 채워진 2차원 배열 $aIniData를 반환합니다. * 사용 예제에서는 임시 INI 파일을 생성하여 함수를 테스트하고 결과를 콘솔에 출력합니다. * For $i = 1 To UBound($aResult) - 1 루프를 사용하여 배열 내용을 순회하며 출력합니다. 배열의 0번째 인덱스는 초기 선언 시의 빈 값이므로 1부터 시작하는 것이 일반적입니다. === 개선 사항 === # 값도 포함: 만약 키뿐만 아니라 해당 키의 값도 2차원 배열에 저장하고 싶다면, 배열의 차원을 3으로 늘려 $aIniData[$iIndex][2]에 값을 저장하거나, 또는 섹션과 키를 포함하는 새로운 UDT (User Defined Type)를 정의하여 배열에 저장하는 방법도 고려할 수 있습니다. # 빈 라인 또는 주석 처리: 현재 코드는 빈 라인이나 ;으로 시작하는 주석 라인을 자동으로 건너뛰므로 특별히 처리할 필요는 없습니다. # 오류 처리 강화: 파일 열기 실패, 읽기 실패 등 추가적인 오류 처리를 할 수 있습니다. 이 코드는 AutoIt에서 INI 파일의 섹션과 키를 효율적으로 2차원 배열로 구성하는 방법을 제공합니다. [[category:autoit]]
문서 저장 미리 보기 차이 보기 취소