2013. 12. 19. 10:56

워드에서 폴더 단위로 파일을 열어서 특정 단어 검색하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


문서를 실행하시면 컨텐츠 사용여부를 묻는 메세지가 나옵니다.
반드시 허용하셔야 합니다.

1. 폴더 가져오기로 해당 폴더의 워드파일들을 가져옵니다.
너무 많으면 오류가 발생할 수 있으므로 적당한 수로 나누어서 하시기 바랍니다.
한 50개 정도는 문제가 없었던거 같습니다.

2. 문서 중에 검색 대상이 아닌 문서는 목록에서 선택하신 후 리스트 1건 삭제 버튼을 클릭하시면 됩니다.

3. 검색단어 에 검색할 단어를 입력하시고 하단의 자료추출 버튼을 클릭하시면됩니다.

4. 검색조건은 몇개의 파일을 하나의 결과문서에 나타낼지를 정하는 것입니다.
예를 들어 50개 문서에 검색조건 10을 선택하면 결과문서는 5개가 나옵니다.

오류가 발생하는 경우가 있습니다. 이 때는 매크로 창에서 도구->참조 창을 엽니다.
사용가능한 참조 들 중에 앞에 '누락-'으로 시작하는 항목들이 있는데 이 것들의 체크박스를 풀어주시면 정상적으로 수행될 것입니다.

한번 써보시면 쉽게 될 겁니다. 

--------------------------------------------

문서 검색.docm



Private Sub CommandButton1_Click()


getFolder


End Sub


 

 

 

Private Sub CommandButton2_Click()

    getSentense


End Sub




Sub goCopy()

    

    varCnt = ListBox1.ListCount

    fileCnt = TextBox2.Value

    

    i = 0

    Do While i < varCnt

        fileNum = i Mod fileCnt

        If fileNum = 0 Then

            If i = 0 Then

            Else

                ActiveDocument.Close SaveChanges:=wdSaveChanges

            End If

            

            ChangeFileOpenDirectory TextBox1.Text


            Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0

            newFileName = "복사대상" & i + 1 & "-" & i + fileCnt & Date & Hour(Time) & Minute(Time) & Second(Time) & ".docx"

            ActiveDocument.SaveAs FileName:=newFileName

        End If

        

        fileVal = ListBox1.List(i)

        

        chkLen = InStr(fileVal, "-")

        fileVal = Left(fileVal, chkLen - 1)

        

        '복사할 대상을 열어 복사함

        Documents.Open FileName:=fileVal, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""

        Selection.WholeStory

        Selection.Copy

        Documents(fileVal).Close

        

        '새 파일을 저장한 위치로 옮김.

        ChangeFileOpenDirectory TextBox1.Text


        Documents(newFileName).Activate

        Documents(newFileName).Select

        

        '새파일의 맨 뒤로 이동함.

        Selection.EndKey Unit:=wdStory

                

        '붙혀넣기 전에 링크를 추가함

        ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _

            fileVal, SubAddress:="", ScreenTip:="", TextToDisplay:=fileVal

                    

        '붙여 넣기함.

        Selection.PasteAndFormat (wdPasteDefault)

        

        ' 맨 뒤로 이동하여 다음 파일 붙여넣기 준비함

        Selection.EndKey Unit:=wdStory

        

        '다음 페이지로 넘어가기 ctr+enter

        Selection.InsertBreak Type:=wdPageBreak

        

        i = i + 1

    Loop

    

    ActiveDocument.Save

    

End Sub





Sub getFolder()


    '각종 변수 선언

    Dim strPath As String

    Dim strNm As String

    Dim i As Integer

    

    

    Dim fdFolder As FileDialog

    Dim lngCount As Long

    

    ' 현재 있는 데이터를 모두 삭제해야 함.

    ListBox1.Clear

    

    '서브폴더의 내용을 가져옴

    Set fdFolder = Application.FileDialog(msoFileDialogFolderPicker)

    With fdFolder

        .Title = "검색할 폴더를 선택 하세요"

        If .Show = -1 Then

            folderspec = .SelectedItems(1)  '선택한 폴더명을 A3 셀에 저장

            getSubFolder (folderspec)

        End If

    End With

    

    TextBox1.Text = folderspec

    TextBox11.Text = ListBox1.ListCount

    TextBox2.Text = ListBox1.ListCount


    

    

End Sub


Sub getSubFolder(folderspec)

    Dim result As String

    Dim strFilter As String

    Dim Msg As String

    Dim strDir As String

    Dim r As Long

    

    strDir = folderspec

    If strDir = "" Then

        MsgBox (" 선택된 폴더가 없습니다. 폴더를 선택하세요.")

        Exit Sub

    End If

        

    r = 1

    r = r + 1

    If Trim(Right(strDir, 1)) <> "\" Then strDir = strDir & "\"

    

    strFilter = "*.doc*"

    

    result = sRetrieve(strDir, strFilter, r)

    

     

End Sub


Private Function sRetrieve(sPath As String, strFilter As String, r As Long) As String

    

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dDirs = fs.getFolder(sPath)

    

    For Each dDir In dDirs.SubFolders

        sRetrieve = sRetrieve(dDir.Path, strFilter, r)

    Next

    

    For Each fFile In dDirs.Files

        If fFile.Name Like strFilter Then

            If Left(fFile.Name, 1) = "~" Then

            Else

                ListBox1.AddItem fFile.Path & "-" & fFile.Size

                

                

            End If

            r = r + 1

        End If

    Next

    

    Set fs = Nothing

    

End Function

 


Private Sub CommandButton3_Click()

    'Ensure ListBox contains list items

    If ListBox1.ListCount >= 1 Then

        'If no selection, choose last list item.

        If ListBox1.ListIndex = -1 Then

            ListBox1.ListIndex = ListBox1.ListCount - 1

        End If

        ListBox1.RemoveItem (ListBox1.ListIndex)

    End If


    TextBox11 = ListBox1.ListCount

    

End Sub


Private Sub ListBox1_Click()

    TextBox3.Text = ListBox1

    

End Sub


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    selName = ListBox1

    docNameLen = Len(selName)

    chkLen = InStr(selName, "-")

    selName = Left(selName, chkLen - 1)

    Documents.Open (selName)


End Sub



Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    copyName = ListBox2

    Documents.Open (copyName)


End Sub



Sub getSentense()


    varCnt = ListBox1.ListCount

    fileCnt = TextBox2.Value

    targetText = TextBox4.Value

    

    

    i = 0

    Do While i < varCnt

        fileNum = i Mod fileCnt

        If fileNum = 0 Then

            If i = 0 Then

            Else

                ActiveDocument.Close SaveChanges:=wdSaveChanges

            End If

            

            ChangeFileOpenDirectory TextBox1.Text


            Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0

            newFileName = "복사대상" & TextBox2.Text & i + 1 & "-" & i + fileCnt & Date & Hour(Time) & Minute(Time) & Second(Time) & ".docx"

            ActiveDocument.SaveAs FileName:=newFileName

        End If

        

        fileVal = ListBox1.List(i)

        

        chkLen = InStr(fileVal, "-")

        fileVal = Left(fileVal, chkLen - 1)

        sendVal = newFileName & "*" & fileVal

        '복사할 대상을 열어 복사함

        Documents.Open FileName:=fileVal, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""

        

'자료찾아복사하는 함수 호출함.

chkexeval = True

    Do While chkexeval = True

    

        Selection.Find.ClearFormatting

        

        With Selection.Find

            .Text = targetText

            .Replacement.Text = ""

            .Forward = True

            .Wrap = wdFindStop

            .Format = False

            .MatchCase = False

            .MatchWholeWord = False

            .MatchByte = False

            .CorrectHangulEndings = True

            .HanjaPhoneticHangul = False

            .MatchWildcards = False

            .MatchSoundsLike = False

            .MatchAllWordForms = False

        End With

        

        chkexeval = Selection.Find.Execute

        

        If chkexeval = True Then

        

            Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend

'            Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend

            Selection.MoveRight Unit:=wdWord, Count:=7, Extend:=wdExtend

            Selection.Copy

            Selection.MoveRight Unit:=wdCharacter, Count:=1

        

        End If

        

            '새 파일을 저장한 위치로 옮김.

            ChangeFileOpenDirectory TextBox1.Text

    

            Documents(newFileName).Activate

            Documents(newFileName).Select

            

            '새파일의 맨 뒤로 이동함.

            Selection.EndKey Unit:=wdStory

            Selection.TypeParagraph

                    


                

                

        '붙혀넣기 전에 링크를 추가함

        ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _

            fileVal, SubAddress:="", ScreenTip:="", TextToDisplay:=fileVal

                    

        '붙여 넣기함.

        Selection.PasteAndFormat (wdFormatPlainText)

        Selection.TypeText (vbTab)

        Selection.TypeText (chkexeval)

        Selection.TypeText (vbTab)

        Selection.EndKey Unit:=wdStory

        Selection.TypeParagraph

    

        Documents(fileVal).Activate

    

    Loop

   

   

        Documents(fileVal).Close

         

        

        i = i + 1

    Loop

    

    ActiveDocument.Save

End Sub


Sub goCopyTitle(sendVal)

        

        txtLen = Len(sendVal)



      

End Sub


2013. 12. 11. 15:30

조인에 대하여

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
제 2절 조인 
조인은 카티션 프로덕트를 실행 후 셀렉션과 프로젝션을 수행하는 데이터베이스의 연산
종류: Nested loops 조인, Sort merge 조인, Hash 조인, Hybrid 조인, Star 조인, Semi 조인
연산자 기준 구분: equi조인, between 조인
집합 기준 구분: inner 조인, Outer 조인
INNER JOIN: 비교값이 일치하는 데이터만 조회
OUTER JOIN: 조회 조건에 일치하는 모든 값과 OUTER TABLE의 나머지 값. 

1.Nested-Loop 조인
 - 두 집합을 카티션 프로덕트 형태로 모든 튜픙르 열거한 다음, 조인에 만족하지 않는 튜플을 제거하는 알고리즘
   즉 사원 * 부서 인 경우 부서테이블 200개를 10000번 읽어야 함.  
 outer에 정의된 row만큼 반복적으로 액세스 하므로 수행속도가 저하된다. 

Indexed Nested-Loop 
 inner 집합에 정의된 인덱스를 사용하므로 속도가 향상된다. 
 조인조건: indexed Nested-join으로 수행되려면 inner table의 조회조건에 반드시 인덱스가 존재해야 함.  
 인덱스가 없으면 sort-merge나 hash 조인이 수행될 것이다. 

 출력순서: 드라이빙 테이블을 액세스한 순서와동일하다
  
 조인순서: 조인 시에 먼저 드라이빙 테이블을 결정하고 나머지 잡합의 조인순서를 결정한다.
 드라이빙 범위가 가장 작은 집합을 선정, 조인의 효율이 좋은 집합(row수가 적은 집함)을 조인에 참여시킴,
 왜냐하면 선행 집합의 결과가 다른 집합의 결과에 영향을 미치기 때문이다. 
 
 성능에 관련된 규칙
  - 드라이빙 조건의 범위가 좁은 경우는 항상 성능이 양호하다.
  - 드라이빙 조건의 범위가 넓은 경우는 체크조건도 검색범위가 넓어야 성능이 양호하다. (부분범위처리시 운반단위(추출버퍼)가 채워질 때까지만 수행하고 일단 멈춘다.)

  (sql 수행가이드 참조할 것)
  
  sort merge 조인
   - 조인하려는 두 집합을 조인 속성으로 정렬하여 sorted lists를 만든 후 이를 merge하는 조인 기겁
   인덱스가 없을 때 simple Nested-Loop 조인의 비효율을 개선하기 위해 고안됨. 
   인덱스가 없을 경우 좋은 성능을 나타낸다. 
   
   조인조건: 조인 속성에 인덱스가 없을 경우 주로 발생한다. 
   출력 및 연결 순서: outer 집합 의 정렬 순서와 inner 집합의 정렬 순서가 머지되어 출력된다. 
   선행 집합의 조인 결과가 다음 조인에 참여하는 집합의 작업량에 영향을 미치므로 조인 효율이 조흔 입합을 조인에 먼저 참여시켜야 전체적인 조인 성능이 좋아지게 된다. 
   조건절: 소트에 참여하는 row의 수에 의해 수행속도가 결정된다. 
   정렬 시간이 많이 소요되므로 OLTP에서 사용할 수 없다. 
   Sort Area를 확보해야 한다. 
   이용: 독립적으로 처리범위를 줄인 후조인에 참여하므로 테이블 가각의 조건에 의해 대상 집합을 줄일 수 있을 때 유리하다. 
   처리대상이 전체 테이블일 때 랜텀 IO부하가 큰 Nested-loop 조인보다 유리하다
   조인속성에 인덱스가 없을 때 simple nested loop 조인보다 성능이 우수하다. 
   효과적인 수행을 위해 적절한 sort area size 확보가 필요하다. 
   정렬에 대한 부하가 많이 발생하므로 대용량 처리 시 수행 속도가 저하될 수 있다 
  
  Hash 조인
   대용량 데이터 조인 시 sort-merge나 nested loop 보다 좋은 성능을 나타낸다.
   조인에 참여한 두 집합 중 작은 집합의 해쉬 테이블을 메모리상에 만들고 큰 집합은 조인을 위해 해쉬테이블을 참침한다. 
   이용가능한 메뮤리가 작은집합을 유지할 정도로 충분하지 않다면 Hash area 오버플로우가 발생한다. 
   
   하이브리드 조인
    - nested loop 와 sort merge 조인의 알고리즘을 혼합한 개념



Outer join 예시:
TABLE A
사번 부서 이름 직급
A100 인사부 김유신 대리
A101 총무부 홍길동 주임
A102 총무부 전우치 과장
A103 영업부 이순신 대리
A104 회계부 강감찬 대리
A105 생산부 을지문덕 부장



TABLE B
부서 부서상세 부서장
인사부 1부 강호동
영업부 1부 이승엽
영업부 2부 이상민
회계부 1부 서장훈



outer join 시


SELECT * FROM  a LEFT OUTER JOIN b ON a.부서= b.부서


a를 기준으로 b를 조회한다 즉 아래와 같이 조회된다.


사번 부서 이름 직급 부서 부서상세 부서장
A100 인사부 김유신 대리 인사부 1부 강호동
A103 영업부 이순신 대리 영업부 1부 이승엽
A103 영업부 이순신 대리 영업부 2부 이상민
A104 회계부 강감찬 대리 회계부 1부 서장훈
A105 생산부 을지문덕 부장
A101 총무부 홍길동 주임
A102 총무부 전우치 과장




'DAP' 카테고리의 다른 글

실행계획 보기  (0) 2013.12.05
dap 관련 인터넷 참고 자료2  (0) 2013.02.08
2013. 12. 5. 11:09

실행계획 보기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SELECT /*+gather_plan_statistics*/col_name1, col_name2, ....

  FROM table_name_1

 where key_Type = '500'


/*/통계 보기 /*/

select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

'DAP' 카테고리의 다른 글

조인에 대하여  (0) 2013.12.11
dap 관련 인터넷 참고 자료2  (0) 2013.02.08
2013. 12. 4. 23:27

재미있는 덧신-USB실내화 발열실내화

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아내가 늘 발이 시리다고 해서 발열 덧신을 샀는데 생각보다 괜찮네요. 

usb를 통해 가열하는 제품인데 usb는 6v 정도이니 다칠 염려도 적고

전기 꽂고 1분이내에 따뜻해집니다. 좀 지나면 뜨겁다는 느낌이 듭니다. 

아내는 자기가 원하던 제품이라며 좋아하네요. 

가격도 저렴한데 사용하기 쉽고 좋습니다. 

발가락이 시려서 고생하시는 분들에게 좋은 제품입니다. 


덧신은 빨간색. 분홍색 두가지인데 빨간색으로 샀습니다. 

USB 선은 대략 1m정도 됩니다. 



선을 뺄 수도 있습니다. 





 덧신 안에 열선이 든 패드가 있습니다.

패드 가운데에 10cm 정도 되는 열선이 한가닥 들어 있습니다. 

그래서 usb 연결 후 10분 정도 지나면 발 앞부분 중앙이 뜨겁기 시작합니다 

그래도 아주 뜨겁지는 않습니다. usb 로 뜨거워 봤자 얼마나 뜨겁겠습니까?



발열패드를 신발에서 꺼낸 사진입니다. 

가운데 있는 자는 큰애가 사용하는 18cm 초등학생용 플라스틱자. 


260 남자 발에 꽉 끼네요. 




2013. 11. 20. 22:08

데이터아키텍처 전문가 실기문제 출제방향 및 고려사항

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

데이터아키텍처 전문가 실기문제 출제방향 및 고려사항 입니다. 

데이터베이스 진흥원에 있는 글인데 간단하게 요약하면 


1. 주관식 문제의 출제 방향

 가 논리 데이터 모델 작성 문제 출제 유형 .
    - 새로 작성하는 유형과 작성된 것을 고치는 유형이 나온다고 합니다. 
     그렇지만 대부분은 새로 작성하는 유형이 아닐까요? 
 나 표준화 정의 작성 문제 출제 유형 .
   영역1 데이터 표준화 기본원칙 :매번 나오는 것입니다.
   영역2 엔터티 속성 정의 : 23회에 처음 나오지 않았나요? 굉장히 낯설어서 헤맸습니다. 반드시 공부하시길
   영역3 데이터 표준 기본 구성요소 : 정답을 참조해서 작성하면 쉽게 작성할 수 있습니다. 

2. 논리 모델 작성 지문은 용지 장 정도의 분량으로 출제되어 시험 시간동안 풀게 되는데 지문이 A4 2 ,상당한 분량이라 주어진 지문의 내용을 짧은 시간 동안 분석하기는 쉽지 않다 시간이 부족한 상태에서 지문을 검토하다 보면 간과하기 쉬운 내용들이 나타난다 다음은 주관식 문제를 풀 때 주의를 기울이고 염두에 두어야 할 사항들이다 .
. 주관식 문제 지문의 구성을 이해해야 한다.
. 주관식 문제 헤더의 제약사항을 기억하고 주의해야 한다.
. 데이터 모델의 표기법은 정확하게 사용해야 한다.
. 서브타입 정의에 주의하고 관계명을 반드시 표기해야 한다 , .
. 답안은 정규화된 모델이어야 한다.
. 주관식 문제 전체에서 요구하는 방향을 이해해야 한다.

==>  erd를 그리게 되면 반드시 순환참조가 나옵니다.  다 그렸는데 순환참조가 없으면 한번 고민해야 할 일입니다. 
아크타입이 대부분 나옵니다. 이것도 없으면 놓친 부분이 없는지 고민해야 합니다. 
코드 값 등으로 엔티티를 처리하면 안됩니다. 반드시 서브엔티티를 식별해야 합니다. 
ie냐 바커나 하는 것은 큰 차이가 없습니다. 편한 걸로 하면 됩니다.