<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8</id>
	<title>오토잇 폴더 내부 텍스트 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8&amp;action=history"/>
	<updated>2026-07-02T03:39:53Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8&amp;diff=2320&amp;oldid=prev</id>
		<title>Devcafe: /* autoit 폴더 내부 텍스트 */</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8&amp;diff=2320&amp;oldid=prev"/>
		<updated>2025-09-26T07:10:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;autoit 폴더 내부 텍스트&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025년 9월 26일 (금) 16:10 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== autoit 폴더 내부 텍스트==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== autoit 폴더 내부 텍스트==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=autoit&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#Region ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#Region ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l393&quot;&gt;393번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;394번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ; 구현 생략...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ; 구현 생략...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EndFunc&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EndFunc&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8&amp;diff=2319&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == 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 &lt;ButtonConstants.au3&gt; #include &lt;EditConstants.au3&gt; #include &lt;GUIConstantsEx.au3&gt; #include &lt;GuiListView.au3&gt; #include &lt;GuiListBox.au...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%98%A4%ED%86%A0%EC%9E%87_%ED%8F%B4%EB%8D%94_%EB%82%B4%EB%B6%80_%ED%85%8D%EC%8A%A4%ED%8A%B8&amp;diff=2319&amp;oldid=prev"/>
		<updated>2025-09-26T07:09:43Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == 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 &amp;lt;ButtonConstants.au3&amp;gt; #include &amp;lt;EditConstants.au3&amp;gt; #include &amp;lt;GUIConstantsEx.au3&amp;gt; #include &amp;lt;GuiListView.au3&amp;gt; #include &amp;lt;GuiListBox.au...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== autoit 폴더 내부 텍스트==&lt;br /&gt;
&lt;br /&gt;
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
#AutoIt3Wrapper_Icon=search.ico&lt;br /&gt;
#AutoIt3Wrapper_Res_Description=텍스트 파일 검색 프로그램&lt;br /&gt;
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0&lt;br /&gt;
#AutoIt3Wrapper_Res_ProductVersion=1.0.0&lt;br /&gt;
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ButtonConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;EditConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GuiListView.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GuiListBox.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;StaticConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;WindowsConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;File.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;Array.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;String.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;StringConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; ===== 전역 변수 =====&lt;br /&gt;
Global $g_hGUI, $g_idFolderPath, $g_idSearchText, $g_idResultList&lt;br /&gt;
Global $g_idBtnBrowse, $g_idBtnSearch, $g_idBtnSave, $g_idBtnClear&lt;br /&gt;
Global $g_idChkRegex, $g_idChkCase, $g_idChkSubFolder&lt;br /&gt;
Global $g_idCmbFileType, $g_idProgressBar, $g_idStatusBar&lt;br /&gt;
Global $g_aResults[1][6] ; [파일경로, 상대경로, 라인번호, 라인내용, 파일크기, 수정일시]&lt;br /&gt;
Global $g_iResultCount = 0&lt;br /&gt;
Global $g_sBaseFolder = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; 지원할 파일 확장자&lt;br /&gt;
Global $g_aFileTypes[11][2] = [[&amp;quot;전체 텍스트 파일&amp;quot;, &amp;quot;*.txt;*.log;*.sql;*.ini;*.cfg;*.conf;*.properties&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;텍스트 파일 (*.txt)&amp;quot;, &amp;quot;*.txt&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;로그 파일 (*.log)&amp;quot;, &amp;quot;*.log&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;SQL 파일 (*.sql)&amp;quot;, &amp;quot;*.sql&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;설정 파일 (*.ini;*.cfg;*.conf)&amp;quot;, &amp;quot;*.ini;*.cfg;*.conf&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;스크립트 파일 (*.py;*.js;*.vbs;*.au3)&amp;quot;, &amp;quot;*.py;*.js;*.vbs;*.au3&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;웹 파일 (*.html;*.htm;*.xml;*.json)&amp;quot;, &amp;quot;*.html;*.htm;*.xml;*.json&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;배치 파일 (*.bat;*.cmd;*.ps1)&amp;quot;, &amp;quot;*.bat;*.cmd;*.ps1&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;오라클 추적 파일 (*.trc)&amp;quot;, &amp;quot;*.trc&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;마크다운 (*.md)&amp;quot;, &amp;quot;*.md&amp;quot;], _&lt;br /&gt;
                              [&amp;quot;모든 파일 (*.*)&amp;quot;, &amp;quot;*.*&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Main()&lt;br /&gt;
&lt;br /&gt;
Func Main()&lt;br /&gt;
    CreateGUI()&lt;br /&gt;
    &lt;br /&gt;
    While 1&lt;br /&gt;
        Local $nMsg = GUIGetMsg()&lt;br /&gt;
        Switch $nMsg&lt;br /&gt;
            Case $GUI_EVENT_CLOSE&lt;br /&gt;
                ExitLoop&lt;br /&gt;
                &lt;br /&gt;
            Case $g_idBtnBrowse&lt;br /&gt;
                BrowseFolder()&lt;br /&gt;
                &lt;br /&gt;
            Case $g_idBtnSearch&lt;br /&gt;
                StartSearch()&lt;br /&gt;
                &lt;br /&gt;
            Case $g_idBtnSave&lt;br /&gt;
                SaveResults()&lt;br /&gt;
                &lt;br /&gt;
            Case $g_idBtnClear&lt;br /&gt;
                ClearResults()&lt;br /&gt;
                &lt;br /&gt;
            Case $g_idResultList&lt;br /&gt;
                If @extended = $NM_DBLCLK Then&lt;br /&gt;
                    OpenSelectedFile()&lt;br /&gt;
                EndIf&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    WEnd&lt;br /&gt;
    &lt;br /&gt;
    GUIDelete()&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func CreateGUI()&lt;br /&gt;
    ; 메인 윈도우 생성&lt;br /&gt;
    $g_hGUI = GUICreate(&amp;quot;텍스트 파일 검색 프로그램 v1.0 - Oracle DBA Tools&amp;quot;, 900, 650, -1, -1, $WS_OVERLAPPEDWINDOW)&lt;br /&gt;
    &lt;br /&gt;
    ; 폴더 선택 그룹&lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;검색 경로&amp;quot;, 10, 10, 880, 60)&lt;br /&gt;
    GUICtrlCreateLabel(&amp;quot;폴더:&amp;quot;, 20, 35, 40, 20)&lt;br /&gt;
    $g_idFolderPath = GUICtrlCreateInput(&amp;quot;&amp;quot;, 65, 32, 730, 23)&lt;br /&gt;
    $g_idBtnBrowse = GUICtrlCreateButton(&amp;quot;찾기&amp;quot;, 805, 30, 80, 27)&lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;&amp;quot;, -99, -99, 1, 1) ; 그룹 종료&lt;br /&gt;
    &lt;br /&gt;
    ; 검색 옵션 그룹&lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;검색 옵션&amp;quot;, 10, 80, 880, 90)&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlCreateLabel(&amp;quot;검색어:&amp;quot;, 20, 105, 50, 20)&lt;br /&gt;
    $g_idSearchText = GUICtrlCreateInput(&amp;quot;&amp;quot;, 75, 102, 300, 23)&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlCreateLabel(&amp;quot;파일 형식:&amp;quot;, 390, 105, 60, 20)&lt;br /&gt;
    $g_idCmbFileType = GUICtrlCreateCombo(&amp;quot;&amp;quot;, 455, 102, 200, 200, $CBS_DROPDOWNLIST)&lt;br /&gt;
    &lt;br /&gt;
    ; 파일 형식 콤보박스 채우기&lt;br /&gt;
    Local $sFileTypes = &amp;quot;&amp;quot;&lt;br /&gt;
    For $i = 0 To UBound($g_aFileTypes) - 1&lt;br /&gt;
        $sFileTypes &amp;amp;= $g_aFileTypes[$i][0]&lt;br /&gt;
        If $i &amp;lt; UBound($g_aFileTypes) - 1 Then $sFileTypes &amp;amp;= &amp;quot;|&amp;quot;&lt;br /&gt;
    Next&lt;br /&gt;
    GUICtrlSetData($g_idCmbFileType, $sFileTypes, $g_aFileTypes[0][0])&lt;br /&gt;
    &lt;br /&gt;
    $g_idBtnSearch = GUICtrlCreateButton(&amp;quot;검색 시작&amp;quot;, 680, 100, 100, 27)&lt;br /&gt;
    $g_idBtnClear = GUICtrlCreateButton(&amp;quot;결과 지우기&amp;quot;, 790, 100, 90, 27)&lt;br /&gt;
    &lt;br /&gt;
    ; 체크박스 옵션들&lt;br /&gt;
    $g_idChkCase = GUICtrlCreateCheckbox(&amp;quot;대소문자 구분&amp;quot;, 20, 135, 100, 20)&lt;br /&gt;
    $g_idChkRegex = GUICtrlCreateCheckbox(&amp;quot;정규식 사용&amp;quot;, 130, 135, 100, 20)&lt;br /&gt;
    $g_idChkSubFolder = GUICtrlCreateCheckbox(&amp;quot;하위 폴더 포함&amp;quot;, 240, 135, 100, 20)&lt;br /&gt;
    GUICtrlSetState($g_idChkSubFolder, $GUI_CHECKED) ; 기본적으로 체크&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;&amp;quot;, -99, -99, 1, 1) ; 그룹 종료&lt;br /&gt;
    &lt;br /&gt;
    ; 결과 리스트뷰&lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;검색 결과&amp;quot;, 10, 180, 880, 400)&lt;br /&gt;
    $g_idResultList = GUICtrlCreateListView(&amp;quot;파일명|상대 경로|라인|내용|크기|수정일시&amp;quot;, 20, 200, 860, 350, $LVS_REPORT + $LVS_SHOWSELALWAYS)&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 0, 150)  ; 파일명&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 1, 250)  ; 상대경로&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 2, 50)   ; 라인&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 3, 300)  ; 내용&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 4, 70)   ; 크기&lt;br /&gt;
    _GUICtrlListView_SetColumnWidth($g_idResultList, 5, 120)  ; 수정일시&lt;br /&gt;
    GUICtrlCreateGroup(&amp;quot;&amp;quot;, -99, -99, 1, 1) ; 그룹 종료&lt;br /&gt;
    &lt;br /&gt;
    ; 하단 버튼들&lt;br /&gt;
    $g_idBtnSave = GUICtrlCreateButton(&amp;quot;결과 저장&amp;quot;, 20, 590, 100, 30)&lt;br /&gt;
    GUICtrlCreateButton(&amp;quot;도움말&amp;quot;, 130, 590, 80, 30)&lt;br /&gt;
    &lt;br /&gt;
    ; 상태바&lt;br /&gt;
    $g_idStatusBar = GUICtrlCreateLabel(&amp;quot;준비됨&amp;quot;, 20, 630, 860, 15)&lt;br /&gt;
    &lt;br /&gt;
    GUISetState(@SW_SHOW)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func BrowseFolder()&lt;br /&gt;
    Local $sFolder = FileSelectFolder(&amp;quot;검색할 폴더를 선택하세요&amp;quot;, &amp;quot;&amp;quot;, 1)&lt;br /&gt;
    If $sFolder &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
        GUICtrlSetData($g_idFolderPath, $sFolder)&lt;br /&gt;
        $g_sBaseFolder = $sFolder&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func StartSearch()&lt;br /&gt;
    Local $sFolder = GUICtrlRead($g_idFolderPath)&lt;br /&gt;
    Local $sSearchText = GUICtrlRead($g_idSearchText)&lt;br /&gt;
    &lt;br /&gt;
    ; 입력값 검증&lt;br /&gt;
    If $sFolder = &amp;quot;&amp;quot; Then&lt;br /&gt;
        MsgBox(16, &amp;quot;오류&amp;quot;, &amp;quot;검색할 폴더를 선택해주세요.&amp;quot;)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
    &lt;br /&gt;
    If Not FileExists($sFolder) Then&lt;br /&gt;
        MsgBox(16, &amp;quot;오류&amp;quot;, &amp;quot;선택한 폴더가 존재하지 않습니다.&amp;quot;)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
    &lt;br /&gt;
    If $sSearchText = &amp;quot;&amp;quot; Then&lt;br /&gt;
        MsgBox(16, &amp;quot;오류&amp;quot;, &amp;quot;검색어를 입력해주세요.&amp;quot;)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
    &lt;br /&gt;
    ; 검색 옵션 읽기&lt;br /&gt;
    Local $bCaseSensitive = (GUICtrlRead($g_idChkCase) = $GUI_CHECKED)&lt;br /&gt;
    Local $bUseRegex = (GUICtrlRead($g_idChkRegex) = $GUI_CHECKED)&lt;br /&gt;
    Local $bIncludeSubFolder = (GUICtrlRead($g_idChkSubFolder) = $GUI_CHECKED)&lt;br /&gt;
    &lt;br /&gt;
    Local $iFileTypeIndex = _GUICtrlComboBox_GetCurSel($g_idCmbFileType)&lt;br /&gt;
    Local $sFilePattern = $g_aFileTypes[$iFileTypeIndex][1]&lt;br /&gt;
    &lt;br /&gt;
    ; 결과 초기화&lt;br /&gt;
    ClearResults()&lt;br /&gt;
    &lt;br /&gt;
    ; 검색 시작&lt;br /&gt;
    GUICtrlSetData($g_idStatusBar, &amp;quot;검색 중...&amp;quot;)&lt;br /&gt;
    GUICtrlSetState($g_idBtnSearch, $GUI_DISABLE)&lt;br /&gt;
    &lt;br /&gt;
    $g_sBaseFolder = $sFolder&lt;br /&gt;
    SearchInFolder($sFolder, $sSearchText, $sFilePattern, $bCaseSensitive, $bUseRegex, $bIncludeSubFolder)&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlSetState($g_idBtnSearch, $GUI_ENABLE)&lt;br /&gt;
    GUICtrlSetData($g_idStatusBar, &amp;quot;검색 완료: &amp;quot; &amp;amp; $g_iResultCount &amp;amp; &amp;quot;개 결과 발견&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    If $g_iResultCount = 0 Then&lt;br /&gt;
        MsgBox(64, &amp;quot;검색 완료&amp;quot;, &amp;quot;검색 결과가 없습니다.&amp;quot;)&lt;br /&gt;
    Else&lt;br /&gt;
        MsgBox(64, &amp;quot;검색 완료&amp;quot;, $g_iResultCount &amp;amp; &amp;quot;개의 결과를 찾았습니다.&amp;quot;)&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func SearchInFolder($sFolder, $sSearchText, $sFilePattern, $bCaseSensitive, $bUseRegex, $bIncludeSubFolder)&lt;br /&gt;
    Local $aFiles, $aFileList&lt;br /&gt;
    Local $sSearchPattern = $bIncludeSubFolder ? &amp;quot;*&amp;quot; : &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    ; 파일 패턴을 배열로 분할&lt;br /&gt;
    Local $aPatterns = StringSplit($sFilePattern, &amp;quot;;&amp;quot;, $STR_NOCOUNT)&lt;br /&gt;
    &lt;br /&gt;
    For $sPattern In $aPatterns&lt;br /&gt;
        If $bIncludeSubFolder Then&lt;br /&gt;
            $aFiles = _FileListToArrayRec($sFolder, $sPattern, $FLTAR_FILES, $FLTAR_RECUR)&lt;br /&gt;
        Else&lt;br /&gt;
            $aFiles = _FileListToArray($sFolder, $sPattern, $FLTAR_FILES)&lt;br /&gt;
        EndIf&lt;br /&gt;
        &lt;br /&gt;
        If Not @error And IsArray($aFiles) Then&lt;br /&gt;
            For $i = 1 To $aFiles[0]&lt;br /&gt;
                Local $sFilePath = $bIncludeSubFolder ? $aFiles[$i] : $sFolder &amp;amp; &amp;quot;\&amp;quot; &amp;amp; $aFiles[$i]&lt;br /&gt;
                SearchInFile($sFilePath, $sSearchText, $bCaseSensitive, $bUseRegex)&lt;br /&gt;
                &lt;br /&gt;
                ; 상태 업데이트 (너무 자주 하지 않도록)&lt;br /&gt;
                If Mod($i, 50) = 0 Then&lt;br /&gt;
                    GUICtrlSetData($g_idStatusBar, &amp;quot;검색 중... (&amp;quot; &amp;amp; $i &amp;amp; &amp;quot;/&amp;quot; &amp;amp; $aFiles[0] &amp;amp; &amp;quot; 파일)&amp;quot;)&lt;br /&gt;
                EndIf&lt;br /&gt;
            Next&lt;br /&gt;
        EndIf&lt;br /&gt;
    Next&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func SearchInFile($sFilePath, $sSearchText, $bCaseSensitive, $bUseRegex)&lt;br /&gt;
    Local $hFile = FileOpen($sFilePath, $FO_READ + $FO_UTF8_NOBOM)&lt;br /&gt;
    If $hFile = -1 Then&lt;br /&gt;
        ; UTF-8로 실패하면 ANSI로 시도&lt;br /&gt;
        $hFile = FileOpen($sFilePath, $FO_READ)&lt;br /&gt;
        If $hFile = -1 Then Return&lt;br /&gt;
    EndIf&lt;br /&gt;
    &lt;br /&gt;
    Local $sContent = FileRead($hFile)&lt;br /&gt;
    FileClose($hFile)&lt;br /&gt;
    &lt;br /&gt;
    If $sContent = &amp;quot;&amp;quot; Then Return&lt;br /&gt;
    &lt;br /&gt;
    ; 줄 단위로 분할&lt;br /&gt;
    Local $aLines = StringSplit($sContent, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT)&lt;br /&gt;
    &lt;br /&gt;
    ; 파일 정보 가져오기&lt;br /&gt;
    Local $iFileSize = FileGetSize($sFilePath)&lt;br /&gt;
    Local $sModifiedTime = FileGetTime($sFilePath, $FT_MODIFIED, $FT_STRING)&lt;br /&gt;
    &lt;br /&gt;
    ; 각 줄에서 검색&lt;br /&gt;
    For $i = 0 To UBound($aLines) - 1&lt;br /&gt;
        Local $sLine = $aLines[$i]&lt;br /&gt;
        Local $bFound = False&lt;br /&gt;
        &lt;br /&gt;
        If $bUseRegex Then&lt;br /&gt;
            ; 정규식 검색&lt;br /&gt;
            Local $aResult = StringRegExp($sLine, $sSearchText, $STR_REGEXPARRAYMATCH)&lt;br /&gt;
            If Not @error And IsArray($aResult) Then&lt;br /&gt;
                $bFound = True&lt;br /&gt;
            EndIf&lt;br /&gt;
        Else&lt;br /&gt;
            ; 일반 텍스트 검색&lt;br /&gt;
            Local $sSearchLine = $bCaseSensitive ? $sLine : StringLower($sLine)&lt;br /&gt;
            Local $sSearchTerm = $bCaseSensitive ? $sSearchText : StringLower($sSearchText)&lt;br /&gt;
            If StringInStr($sSearchLine, $sSearchTerm) &amp;gt; 0 Then&lt;br /&gt;
                $bFound = True&lt;br /&gt;
            EndIf&lt;br /&gt;
        EndIf&lt;br /&gt;
        &lt;br /&gt;
        If $bFound Then&lt;br /&gt;
            AddResult($sFilePath, $i + 1, $sLine, $iFileSize, $sModifiedTime)&lt;br /&gt;
        EndIf&lt;br /&gt;
    Next&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func AddResult($sFilePath, $iLineNumber, $sLineContent, $iFileSize, $sModifiedTime)&lt;br /&gt;
    ; 결과 배열 확장&lt;br /&gt;
    ReDim $g_aResults[$g_iResultCount + 1][6]&lt;br /&gt;
    &lt;br /&gt;
    ; 상대 경로 계산&lt;br /&gt;
    Local $sRelativePath = StringReplace($sFilePath, $g_sBaseFolder &amp;amp; &amp;quot;\&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    If $sRelativePath = $sFilePath Then $sRelativePath = StringReplace($sFilePath, $g_sBaseFolder, &amp;quot;&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ; 파일명만 추출&lt;br /&gt;
    Local $aPathParts = StringSplit($sFilePath, &amp;quot;\&amp;quot;, $STR_NOCOUNT)&lt;br /&gt;
    Local $sFileName = $aPathParts[UBound($aPathParts) - 1]&lt;br /&gt;
    &lt;br /&gt;
    ; 결과 저장&lt;br /&gt;
    $g_aResults[$g_iResultCount][0] = $sFilePath&lt;br /&gt;
    $g_aResults[$g_iResultCount][1] = $sRelativePath&lt;br /&gt;
    $g_aResults[$g_iResultCount][2] = $iLineNumber&lt;br /&gt;
    $g_aResults[$g_iResultCount][3] = StringLeft($sLineContent, 200) ; 최대 200자만&lt;br /&gt;
    $g_aResults[$g_iResultCount][4] = Round($iFileSize / 1024, 1) &amp;amp; &amp;quot; KB&amp;quot;&lt;br /&gt;
    $g_aResults[$g_iResultCount][5] = $sModifiedTime&lt;br /&gt;
    &lt;br /&gt;
    ; 리스트뷰에 추가&lt;br /&gt;
    Local $sItem = $sFileName &amp;amp; &amp;quot;|&amp;quot; &amp;amp; $sRelativePath &amp;amp; &amp;quot;|&amp;quot; &amp;amp; $iLineNumber &amp;amp; &amp;quot;|&amp;quot; &amp;amp; _&lt;br /&gt;
                   StringReplace($sLineContent, @TAB, &amp;quot; &amp;quot;) &amp;amp; &amp;quot;|&amp;quot; &amp;amp; _&lt;br /&gt;
                   Round($iFileSize / 1024, 1) &amp;amp; &amp;quot; KB|&amp;quot; &amp;amp; $sModifiedTime&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlCreateListViewItem($sItem, $g_idResultList)&lt;br /&gt;
    &lt;br /&gt;
    $g_iResultCount += 1&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func ClearResults()&lt;br /&gt;
    ; 리스트뷰 클리어&lt;br /&gt;
    _GUICtrlListView_DeleteAllItems($g_idResultList)&lt;br /&gt;
    &lt;br /&gt;
    ; 결과 배열 초기화&lt;br /&gt;
    ReDim $g_aResults[1][6]&lt;br /&gt;
    $g_iResultCount = 0&lt;br /&gt;
    &lt;br /&gt;
    GUICtrlSetData($g_idStatusBar, &amp;quot;결과가 초기화되었습니다.&amp;quot;)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func SaveResults()&lt;br /&gt;
    If $g_iResultCount = 0 Then&lt;br /&gt;
        MsgBox(16, &amp;quot;오류&amp;quot;, &amp;quot;저장할 결과가 없습니다.&amp;quot;)&lt;br /&gt;
        Return&lt;br /&gt;
    EndIf&lt;br /&gt;
    &lt;br /&gt;
    Local $sSaveFile = FileSaveDialog(&amp;quot;검색 결과 저장&amp;quot;, @MyDocumentsDir, &amp;quot;텍스트 파일 (*.txt)|모든 파일 (*.*)&amp;quot;, $FD_PATHMUSTEXIST, &amp;quot;search_results.txt&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    If $sSaveFile &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;
        Local $hFile = FileOpen($sSaveFile, $FO_OVERWRITE + $FO_CREATEPATH + $FO_UTF8_NOBOM)&lt;br /&gt;
        If $hFile = -1 Then&lt;br /&gt;
            MsgBox(16, &amp;quot;오류&amp;quot;, &amp;quot;파일을 생성할 수 없습니다.&amp;quot;)&lt;br /&gt;
            Return&lt;br /&gt;
        EndIf&lt;br /&gt;
        &lt;br /&gt;
        ; 헤더 정보&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;=== 텍스트 파일 검색 결과 ===&amp;quot;)&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;생성일시: &amp;quot; &amp;amp; @YEAR &amp;amp; &amp;quot;-&amp;quot; &amp;amp; @MON &amp;amp; &amp;quot;-&amp;quot; &amp;amp; @MDAY &amp;amp; &amp;quot; &amp;quot; &amp;amp; @HOUR &amp;amp; &amp;quot;:&amp;quot; &amp;amp; @MIN &amp;amp; &amp;quot;:&amp;quot; &amp;amp; @SEC)&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;검색 경로: &amp;quot; &amp;amp; $g_sBaseFolder)&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;총 결과: &amp;quot; &amp;amp; $g_iResultCount &amp;amp; &amp;quot;건&amp;quot;)&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;=&amp;quot; &amp;amp; StringRepeat(&amp;quot;=&amp;quot;, 80))&lt;br /&gt;
        FileWriteLine($hFile, &amp;quot;&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        ; 결과 데이터&lt;br /&gt;
        For $i = 0 To $g_iResultCount - 1&lt;br /&gt;
            FileWriteLine($hFile, &amp;quot;파일: &amp;quot; &amp;amp; $g_aResults[$i][0])&lt;br /&gt;
            FileWriteLine($hFile, &amp;quot;라인: &amp;quot; &amp;amp; $g_aResults[$i][2])&lt;br /&gt;
            FileWriteLine($hFile, &amp;quot;내용: &amp;quot; &amp;amp; $g_aResults[$i][3])&lt;br /&gt;
            FileWriteLine($hFile, &amp;quot;크기: &amp;quot; &amp;amp; $g_aResults[$i][4])&lt;br /&gt;
            FileWriteLine($hFile, &amp;quot;수정일: &amp;quot; &amp;amp; $g_aResults[$i][5])&lt;br /&gt;
            FileWriteLine($hFile, StringRepeat(&amp;quot;-&amp;quot;, 80))&lt;br /&gt;
        Next&lt;br /&gt;
        &lt;br /&gt;
        FileClose($hFile)&lt;br /&gt;
        &lt;br /&gt;
        MsgBox(64, &amp;quot;저장 완료&amp;quot;, &amp;quot;검색 결과가 저장되었습니다.&amp;quot; &amp;amp; @CRLF &amp;amp; $sSaveFile)&lt;br /&gt;
        &lt;br /&gt;
        ; 저장된 파일 열기 여부 확인&lt;br /&gt;
        Local $iResult = MsgBox(36, &amp;quot;파일 열기&amp;quot;, &amp;quot;저장된 파일을 열어보시겠습니까?&amp;quot;)&lt;br /&gt;
        If $iResult = 6 Then ; Yes&lt;br /&gt;
            ShellExecute($sSaveFile)&lt;br /&gt;
        EndIf&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func OpenSelectedFile()&lt;br /&gt;
    Local $iSelected = _GUICtrlListView_GetNextItem($g_idResultList)&lt;br /&gt;
    If $iSelected &amp;gt;= 0 Then&lt;br /&gt;
        Local $sFilePath = $g_aResults[$iSelected][0]&lt;br /&gt;
        Local $iLineNumber = $g_aResults[$iSelected][2]&lt;br /&gt;
        &lt;br /&gt;
        ; 파일 열기 옵션 제공&lt;br /&gt;
        Local $iChoice = MsgBox(35, &amp;quot;파일 열기&amp;quot;, &amp;quot;파일을 어떻게 열까요?&amp;quot; &amp;amp; @CRLF &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
                               &amp;quot;예(Y): 메모장으로 열기&amp;quot; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
                               &amp;quot;아니오(N): 기본 프로그램으로 열기&amp;quot; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
                               &amp;quot;취소: 파일 경로 복사&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        Switch $iChoice&lt;br /&gt;
            Case 6 ; Yes - 메모장&lt;br /&gt;
                Run(&amp;quot;notepad.exe &amp;quot; &amp;amp; &amp;#039;&amp;quot;&amp;#039; &amp;amp; $sFilePath &amp;amp; &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
                &lt;br /&gt;
            Case 7 ; No - 기본 프로그램&lt;br /&gt;
                ShellExecute($sFilePath)&lt;br /&gt;
                &lt;br /&gt;
            Case 2 ; Cancel - 경로 복사&lt;br /&gt;
                ClipPut($sFilePath)&lt;br /&gt;
                MsgBox(64, &amp;quot;복사 완료&amp;quot;, &amp;quot;파일 경로가 클립보드에 복사되었습니다.&amp;quot;)&lt;br /&gt;
        EndSwitch&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; Oracle DBA를 위한 추가 유틸리티 함수들&lt;br /&gt;
&lt;br /&gt;
Func SearchOracleErrors()&lt;br /&gt;
    ; Oracle 에러 패턴들을 미리 정의&lt;br /&gt;
    Local $aOracleErrors[5] = [&amp;quot;ORA-\d{5}&amp;quot;, &amp;quot;TNS-\d{5}&amp;quot;, &amp;quot;RMAN-\d{5}&amp;quot;, &amp;quot;SP2-\d{4}&amp;quot;, &amp;quot;PLS-\d{5}&amp;quot;]&lt;br /&gt;
    &lt;br /&gt;
    ; 콤보박스에서 Oracle 관련 파일 선택&lt;br /&gt;
    ; 구현 생략...&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
Func SearchSQLPatterns()&lt;br /&gt;
    ; 자주 사용되는 SQL 패턴들&lt;br /&gt;
    Local $aSQLPatterns[6] = [&amp;quot;SELECT.*FROM&amp;quot;, &amp;quot;INSERT.*INTO&amp;quot;, &amp;quot;UPDATE.*SET&amp;quot;, &amp;quot;DELETE.*FROM&amp;quot;, &amp;quot;CREATE.*TABLE&amp;quot;, &amp;quot;ALTER.*TABLE&amp;quot;]&lt;br /&gt;
    &lt;br /&gt;
    ; 구현 생략...&lt;br /&gt;
EndFunc&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>