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

오토잇 폴더 내부 텍스트

데브카페
Devcafe (토론 | 기여)님의 2025년 9월 26일 (금) 16:09 판 (새 문서: == autoit 폴더 내부 텍스트== #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=search.ico #AutoIt3Wrapper_Res_Description=텍스트 파일 검색 프로그램 #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_ProductVersion=1.0.0 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiListBox.au...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

autoit 폴더 내부 텍스트

  1. Region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. AutoIt3Wrapper_Icon=search.ico
  3. AutoIt3Wrapper_Res_Description=텍스트 파일 검색 프로그램
  4. AutoIt3Wrapper_Res_Fileversion=1.0.0.0
  5. AutoIt3Wrapper_Res_ProductVersion=1.0.0
  6. EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
  1. include <ButtonConstants.au3>
  2. include <EditConstants.au3>
  3. include <GUIConstantsEx.au3>
  4. include <GuiListView.au3>
  5. include <GuiListBox.au3>
  6. include <StaticConstants.au3>
  7. include <WindowsConstants.au3>
  8. include <File.au3>
  9. include <Array.au3>
  10. include <String.au3>
  11. include <StringConstants.au3>
===== 전역 변수 =====

Global $g_hGUI, $g_idFolderPath, $g_idSearchText, $g_idResultList Global $g_idBtnBrowse, $g_idBtnSearch, $g_idBtnSave, $g_idBtnClear Global $g_idChkRegex, $g_idChkCase, $g_idChkSubFolder Global $g_idCmbFileType, $g_idProgressBar, $g_idStatusBar Global $g_aResults[1][6] ; [파일경로, 상대경로, 라인번호, 라인내용, 파일크기, 수정일시] Global $g_iResultCount = 0 Global $g_sBaseFolder = ""

지원할 파일 확장자

Global $g_aFileTypes[11][2] = [["전체 텍스트 파일", "*.txt;*.log;*.sql;*.ini;*.cfg;*.conf;*.properties"], _

                             ["텍스트 파일 (*.txt)", "*.txt"], _
                             ["로그 파일 (*.log)", "*.log"], _
                             ["SQL 파일 (*.sql)", "*.sql"], _
                             ["설정 파일 (*.ini;*.cfg;*.conf)", "*.ini;*.cfg;*.conf"], _
                             ["스크립트 파일 (*.py;*.js;*.vbs;*.au3)", "*.py;*.js;*.vbs;*.au3"], _
                             ["웹 파일 (*.html;*.htm;*.xml;*.json)", "*.html;*.htm;*.xml;*.json"], _
                             ["배치 파일 (*.bat;*.cmd;*.ps1)", "*.bat;*.cmd;*.ps1"], _
                             ["오라클 추적 파일 (*.trc)", "*.trc"], _
                             ["마크다운 (*.md)", "*.md"], _
                             ["모든 파일 (*.*)", "*.*"]]

Main()

Func Main()

   CreateGUI()
   
   While 1
       Local $nMsg = GUIGetMsg()
       Switch $nMsg
           Case $GUI_EVENT_CLOSE
               ExitLoop
               
           Case $g_idBtnBrowse
               BrowseFolder()
               
           Case $g_idBtnSearch
               StartSearch()
               
           Case $g_idBtnSave
               SaveResults()
               
           Case $g_idBtnClear
               ClearResults()
               
           Case $g_idResultList
               If @extended = $NM_DBLCLK Then
                   OpenSelectedFile()
               EndIf
       EndSwitch
   WEnd
   
   GUIDelete()

EndFunc

Func CreateGUI()

   ; 메인 윈도우 생성
   $g_hGUI = GUICreate("텍스트 파일 검색 프로그램 v1.0 - Oracle DBA Tools", 900, 650, -1, -1, $WS_OVERLAPPEDWINDOW)
   
   ; 폴더 선택 그룹
   GUICtrlCreateGroup("검색 경로", 10, 10, 880, 60)
   GUICtrlCreateLabel("폴더:", 20, 35, 40, 20)
   $g_idFolderPath = GUICtrlCreateInput("", 65, 32, 730, 23)
   $g_idBtnBrowse = GUICtrlCreateButton("찾기", 805, 30, 80, 27)
   GUICtrlCreateGroup("", -99, -99, 1, 1) ; 그룹 종료
   
   ; 검색 옵션 그룹
   GUICtrlCreateGroup("검색 옵션", 10, 80, 880, 90)
   
   GUICtrlCreateLabel("검색어:", 20, 105, 50, 20)
   $g_idSearchText = GUICtrlCreateInput("", 75, 102, 300, 23)
   
   GUICtrlCreateLabel("파일 형식:", 390, 105, 60, 20)
   $g_idCmbFileType = GUICtrlCreateCombo("", 455, 102, 200, 200, $CBS_DROPDOWNLIST)
   
   ; 파일 형식 콤보박스 채우기
   Local $sFileTypes = ""
   For $i = 0 To UBound($g_aFileTypes) - 1
       $sFileTypes &= $g_aFileTypes[$i][0]
       If $i < UBound($g_aFileTypes) - 1 Then $sFileTypes &= "|"
   Next
   GUICtrlSetData($g_idCmbFileType, $sFileTypes, $g_aFileTypes[0][0])
   
   $g_idBtnSearch = GUICtrlCreateButton("검색 시작", 680, 100, 100, 27)
   $g_idBtnClear = GUICtrlCreateButton("결과 지우기", 790, 100, 90, 27)
   
   ; 체크박스 옵션들
   $g_idChkCase = GUICtrlCreateCheckbox("대소문자 구분", 20, 135, 100, 20)
   $g_idChkRegex = GUICtrlCreateCheckbox("정규식 사용", 130, 135, 100, 20)
   $g_idChkSubFolder = GUICtrlCreateCheckbox("하위 폴더 포함", 240, 135, 100, 20)
   GUICtrlSetState($g_idChkSubFolder, $GUI_CHECKED) ; 기본적으로 체크
   
   GUICtrlCreateGroup("", -99, -99, 1, 1) ; 그룹 종료
   
   ; 결과 리스트뷰
   GUICtrlCreateGroup("검색 결과", 10, 180, 880, 400)
   $g_idResultList = GUICtrlCreateListView("파일명|상대 경로|라인|내용|크기|수정일시", 20, 200, 860, 350, $LVS_REPORT + $LVS_SHOWSELALWAYS)
   _GUICtrlListView_SetColumnWidth($g_idResultList, 0, 150)  ; 파일명
   _GUICtrlListView_SetColumnWidth($g_idResultList, 1, 250)  ; 상대경로
   _GUICtrlListView_SetColumnWidth($g_idResultList, 2, 50)   ; 라인
   _GUICtrlListView_SetColumnWidth($g_idResultList, 3, 300)  ; 내용
   _GUICtrlListView_SetColumnWidth($g_idResultList, 4, 70)   ; 크기
   _GUICtrlListView_SetColumnWidth($g_idResultList, 5, 120)  ; 수정일시
   GUICtrlCreateGroup("", -99, -99, 1, 1) ; 그룹 종료
   
   ; 하단 버튼들
   $g_idBtnSave = GUICtrlCreateButton("결과 저장", 20, 590, 100, 30)
   GUICtrlCreateButton("도움말", 130, 590, 80, 30)
   
   ; 상태바
   $g_idStatusBar = GUICtrlCreateLabel("준비됨", 20, 630, 860, 15)
   
   GUISetState(@SW_SHOW)

EndFunc

Func BrowseFolder()

   Local $sFolder = FileSelectFolder("검색할 폴더를 선택하세요", "", 1)
   If $sFolder <> "" Then
       GUICtrlSetData($g_idFolderPath, $sFolder)
       $g_sBaseFolder = $sFolder
   EndIf

EndFunc

Func StartSearch()

   Local $sFolder = GUICtrlRead($g_idFolderPath)
   Local $sSearchText = GUICtrlRead($g_idSearchText)
   
   ; 입력값 검증
   If $sFolder = "" Then
       MsgBox(16, "오류", "검색할 폴더를 선택해주세요.")
       Return
   EndIf
   
   If Not FileExists($sFolder) Then
       MsgBox(16, "오류", "선택한 폴더가 존재하지 않습니다.")
       Return
   EndIf
   
   If $sSearchText = "" Then
       MsgBox(16, "오류", "검색어를 입력해주세요.")
       Return
   EndIf
   
   ; 검색 옵션 읽기
   Local $bCaseSensitive = (GUICtrlRead($g_idChkCase) = $GUI_CHECKED)
   Local $bUseRegex = (GUICtrlRead($g_idChkRegex) = $GUI_CHECKED)
   Local $bIncludeSubFolder = (GUICtrlRead($g_idChkSubFolder) = $GUI_CHECKED)
   
   Local $iFileTypeIndex = _GUICtrlComboBox_GetCurSel($g_idCmbFileType)
   Local $sFilePattern = $g_aFileTypes[$iFileTypeIndex][1]
   
   ; 결과 초기화
   ClearResults()
   
   ; 검색 시작
   GUICtrlSetData($g_idStatusBar, "검색 중...")
   GUICtrlSetState($g_idBtnSearch, $GUI_DISABLE)
   
   $g_sBaseFolder = $sFolder
   SearchInFolder($sFolder, $sSearchText, $sFilePattern, $bCaseSensitive, $bUseRegex, $bIncludeSubFolder)
   
   GUICtrlSetState($g_idBtnSearch, $GUI_ENABLE)
   GUICtrlSetData($g_idStatusBar, "검색 완료: " & $g_iResultCount & "개 결과 발견")
   
   If $g_iResultCount = 0 Then
       MsgBox(64, "검색 완료", "검색 결과가 없습니다.")
   Else
       MsgBox(64, "검색 완료", $g_iResultCount & "개의 결과를 찾았습니다.")
   EndIf

EndFunc

Func SearchInFolder($sFolder, $sSearchText, $sFilePattern, $bCaseSensitive, $bUseRegex, $bIncludeSubFolder)

   Local $aFiles, $aFileList
   Local $sSearchPattern = $bIncludeSubFolder ? "*" : ""
   
   ; 파일 패턴을 배열로 분할
   Local $aPatterns = StringSplit($sFilePattern, ";", $STR_NOCOUNT)
   
   For $sPattern In $aPatterns
       If $bIncludeSubFolder Then
           $aFiles = _FileListToArrayRec($sFolder, $sPattern, $FLTAR_FILES, $FLTAR_RECUR)
       Else
           $aFiles = _FileListToArray($sFolder, $sPattern, $FLTAR_FILES)
       EndIf
       
       If Not @error And IsArray($aFiles) Then
           For $i = 1 To $aFiles[0]
               Local $sFilePath = $bIncludeSubFolder ? $aFiles[$i] : $sFolder & "\" & $aFiles[$i]
               SearchInFile($sFilePath, $sSearchText, $bCaseSensitive, $bUseRegex)
               
               ; 상태 업데이트 (너무 자주 하지 않도록)
               If Mod($i, 50) = 0 Then
                   GUICtrlSetData($g_idStatusBar, "검색 중... (" & $i & "/" & $aFiles[0] & " 파일)")
               EndIf
           Next
       EndIf
   Next

EndFunc

Func SearchInFile($sFilePath, $sSearchText, $bCaseSensitive, $bUseRegex)

   Local $hFile = FileOpen($sFilePath, $FO_READ + $FO_UTF8_NOBOM)
   If $hFile = -1 Then
       ; UTF-8로 실패하면 ANSI로 시도
       $hFile = FileOpen($sFilePath, $FO_READ)
       If $hFile = -1 Then Return
   EndIf
   
   Local $sContent = FileRead($hFile)
   FileClose($hFile)
   
   If $sContent = "" Then Return
   
   ; 줄 단위로 분할
   Local $aLines = StringSplit($sContent, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT)
   
   ; 파일 정보 가져오기
   Local $iFileSize = FileGetSize($sFilePath)
   Local $sModifiedTime = FileGetTime($sFilePath, $FT_MODIFIED, $FT_STRING)
   
   ; 각 줄에서 검색
   For $i = 0 To UBound($aLines) - 1
       Local $sLine = $aLines[$i]
       Local $bFound = False
       
       If $bUseRegex Then
           ; 정규식 검색
           Local $aResult = StringRegExp($sLine, $sSearchText, $STR_REGEXPARRAYMATCH)
           If Not @error And IsArray($aResult) Then
               $bFound = True
           EndIf
       Else
           ; 일반 텍스트 검색
           Local $sSearchLine = $bCaseSensitive ? $sLine : StringLower($sLine)
           Local $sSearchTerm = $bCaseSensitive ? $sSearchText : StringLower($sSearchText)
           If StringInStr($sSearchLine, $sSearchTerm) > 0 Then
               $bFound = True
           EndIf
       EndIf
       
       If $bFound Then
           AddResult($sFilePath, $i + 1, $sLine, $iFileSize, $sModifiedTime)
       EndIf
   Next

EndFunc

Func AddResult($sFilePath, $iLineNumber, $sLineContent, $iFileSize, $sModifiedTime)

   ; 결과 배열 확장
   ReDim $g_aResults[$g_iResultCount + 1][6]
   
   ; 상대 경로 계산
   Local $sRelativePath = StringReplace($sFilePath, $g_sBaseFolder & "\", "")
   If $sRelativePath = $sFilePath Then $sRelativePath = StringReplace($sFilePath, $g_sBaseFolder, "")
   
   ; 파일명만 추출
   Local $aPathParts = StringSplit($sFilePath, "\", $STR_NOCOUNT)
   Local $sFileName = $aPathParts[UBound($aPathParts) - 1]
   
   ; 결과 저장
   $g_aResults[$g_iResultCount][0] = $sFilePath
   $g_aResults[$g_iResultCount][1] = $sRelativePath
   $g_aResults[$g_iResultCount][2] = $iLineNumber
   $g_aResults[$g_iResultCount][3] = StringLeft($sLineContent, 200) ; 최대 200자만
   $g_aResults[$g_iResultCount][4] = Round($iFileSize / 1024, 1) & " KB"
   $g_aResults[$g_iResultCount][5] = $sModifiedTime
   
   ; 리스트뷰에 추가
   Local $sItem = $sFileName & "|" & $sRelativePath & "|" & $iLineNumber & "|" & _
                  StringReplace($sLineContent, @TAB, " ") & "|" & _
                  Round($iFileSize / 1024, 1) & " KB|" & $sModifiedTime
   
   GUICtrlCreateListViewItem($sItem, $g_idResultList)
   
   $g_iResultCount += 1

EndFunc

Func ClearResults()

   ; 리스트뷰 클리어
   _GUICtrlListView_DeleteAllItems($g_idResultList)
   
   ; 결과 배열 초기화
   ReDim $g_aResults[1][6]
   $g_iResultCount = 0
   
   GUICtrlSetData($g_idStatusBar, "결과가 초기화되었습니다.")

EndFunc

Func SaveResults()

   If $g_iResultCount = 0 Then
       MsgBox(16, "오류", "저장할 결과가 없습니다.")
       Return
   EndIf
   
   Local $sSaveFile = FileSaveDialog("검색 결과 저장", @MyDocumentsDir, "텍스트 파일 (*.txt)|모든 파일 (*.*)", $FD_PATHMUSTEXIST, "search_results.txt")
   
   If $sSaveFile <> "" Then
       Local $hFile = FileOpen($sSaveFile, $FO_OVERWRITE + $FO_CREATEPATH + $FO_UTF8_NOBOM)
       If $hFile = -1 Then
           MsgBox(16, "오류", "파일을 생성할 수 없습니다.")
           Return
       EndIf
       
       ; 헤더 정보
       FileWriteLine($hFile, "=== 텍스트 파일 검색 결과 ===")
       FileWriteLine($hFile, "생성일시: " & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
       FileWriteLine($hFile, "검색 경로: " & $g_sBaseFolder)
       FileWriteLine($hFile, "총 결과: " & $g_iResultCount & "건")
       FileWriteLine($hFile, "=" & StringRepeat("=", 80))
       FileWriteLine($hFile, "")
       
       ; 결과 데이터
       For $i = 0 To $g_iResultCount - 1
           FileWriteLine($hFile, "파일: " & $g_aResults[$i][0])
           FileWriteLine($hFile, "라인: " & $g_aResults[$i][2])
           FileWriteLine($hFile, "내용: " & $g_aResults[$i][3])
           FileWriteLine($hFile, "크기: " & $g_aResults[$i][4])
           FileWriteLine($hFile, "수정일: " & $g_aResults[$i][5])
           FileWriteLine($hFile, StringRepeat("-", 80))
       Next
       
       FileClose($hFile)
       
       MsgBox(64, "저장 완료", "검색 결과가 저장되었습니다." & @CRLF & $sSaveFile)
       
       ; 저장된 파일 열기 여부 확인
       Local $iResult = MsgBox(36, "파일 열기", "저장된 파일을 열어보시겠습니까?")
       If $iResult = 6 Then ; Yes
           ShellExecute($sSaveFile)
       EndIf
   EndIf

EndFunc

Func OpenSelectedFile()

   Local $iSelected = _GUICtrlListView_GetNextItem($g_idResultList)
   If $iSelected >= 0 Then
       Local $sFilePath = $g_aResults[$iSelected][0]
       Local $iLineNumber = $g_aResults[$iSelected][2]
       
       ; 파일 열기 옵션 제공
       Local $iChoice = MsgBox(35, "파일 열기", "파일을 어떻게 열까요?" & @CRLF & @CRLF & _
                              "예(Y): 메모장으로 열기" & @CRLF & _
                              "아니오(N): 기본 프로그램으로 열기" & @CRLF & _
                              "취소: 파일 경로 복사")
       
       Switch $iChoice
           Case 6 ; Yes - 메모장
               Run("notepad.exe " & '"' & $sFilePath & '"')
               
           Case 7 ; No - 기본 프로그램
               ShellExecute($sFilePath)
               
           Case 2 ; Cancel - 경로 복사
               ClipPut($sFilePath)
               MsgBox(64, "복사 완료", "파일 경로가 클립보드에 복사되었습니다.")
       EndSwitch
   EndIf

EndFunc

Oracle DBA를 위한 추가 유틸리티 함수들

Func SearchOracleErrors()

   ; Oracle 에러 패턴들을 미리 정의
   Local $aOracleErrors[5] = ["ORA-\d{5}", "TNS-\d{5}", "RMAN-\d{5}", "SP2-\d{4}", "PLS-\d{5}"]
   
   ; 콤보박스에서 Oracle 관련 파일 선택
   ; 구현 생략...

EndFunc

Func SearchSQLPatterns()

   ; 자주 사용되는 SQL 패턴들
   Local $aSQLPatterns[6] = ["SELECT.*FROM", "INSERT.*INTO", "UPDATE.*SET", "DELETE.*FROM", "CREATE.*TABLE", "ALTER.*TABLE"]
   
   ; 구현 생략...

EndFunc

Comments