Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

Extra Form

어제 다음과 같은 프로그램을 짰더랬습니다.
https://gigglehd.com/gg/soft/379801
 

근데 자고 나서 일어나서 생각해 보니, 이 프로그램으로 원하는 파일을 찾는 건 좀 불편할 거란 생각이 들더군요. 그래서 좀 뜯어고치다가, 어째 잘 되지가 않아서 아예 갈아엎고 새로 원하는 대로 만들어 버렸습니다. 새 프로그램은 전처리 파일을 만들 필요 없이, 프로그램 내에서 디렉터리를 지정하면 자체적으로 DWG 파일을 찾게끔 바꾸었습니다.
 

새로 짠 프로그램은 다음과 같습니다.

Option Explicit

'전역 변수 설정.
Public dwgList As Collection

Sub main()
'필요 변수 등 설정.
    Dim dwgName As Variant
    Dim i As Long: i = 0
    Dim readOnly As Boolean: readOnly = True
    Dim fileSystem As Object
    Dim hostFolder As String
    Dim outputFile As String
    Dim findingText As String
    Dim textList As Collection
    Set dwgList = New Collection '프로그램 시작 초기화
    
'프로그램 작동 설정.
    hostFolder = "T:\"
    outputFile = "T:\DWGfindResult.txt"
    findingText = "ASDF"

' 직접실행 창에 작업 시작을 알린다.
    Debug.Print "작업 1단계 개시."

' 각 디렉터리와 그 서브 디렉터리를 재귀적으로 순회한다.
    Set fileSystem = CreateObject("scripting.filesystemobject")
    doFolder fileSystem.getfolder(hostFolder)

' 직접실행 창에 작업 2단계 시작을 알린다.
    Debug.Print ""
    Debug.Print "작업 2단계 개시."

' 순회가 끝나면 경로 컬렉션의 모든 DWG 파일을 하나씩 열기 시작한다.
    For Each dwgName In dwgList
        Set textList = New Collection '초기화 - 버그 방지!

' 진행상황 파악을 위해 직접실행 창에 전체 DWG 파일 갯수와 _
' 현재 열고 있는 DWG 파일 순서를 분수로 출력한다.
        i = i + 1
        Debug.Print i & " / " & dwgList.Count

        On Error Resume Next '오류 발생시 넘어감
        AutoCAD.Documents.Open dwgName, readOnly

' DWG 파일의 모든 텍스트 중 원하는 것이 있는지 찾는다.
' 원하는 텍스트가 포함된 텍스트 데이터를 텍스트 컬렉션에 추가한다.
        Set textList = dwgTextFind(findingText)

' 만약 텍스트 컬렉션의 카운트가 1 이상이면 현재 열린 파일명과 텍스트 컬렉션의 _
' 모든 내용을 직접실행 창에 출력하고, 동시에 지정된 텍스트 파일에 추가한다.
        If textList.Count Then
            resultOutput outputFile, dwgName, textList
        End If

' 열린 DWG 파일을 닫는다.
        AutoCAD.Documents.Close

' 모든 DWG 파일에 이 작업을 반복한다.
    Next
End Sub

Sub doFolder(folder)
'각 디렉터리와 서브 디렉터리를 재귀적으로 순회하기 위한 서브루틴.
    On Error Resume Next '오류 발생시 다음 폴더로 넘어감.
    
    Dim subFolder As Variant
    For Each subFolder In folder.subfolders
        doFolder subFolder
    Next
    
' 순회 과정에서 DWG 파일이 발견되면 경로 컬렉션에 경로를 추가한다.
    Dim file As Variant
    For Each file In folder.Files
        If LCase(file.Name) Like "*.dwg" Then
            dwgList.Add file.Path
            Debug.Print file.Path '화면에 출력
        End If
    Next
End Sub

Function dwgTextFind(findingText) As Collection
'DWG 파일 내의 모든 텍스트에서 원하는 부분이 있는지 찾아, _
'조건이 맞는 모든 텍스트를 모은 컬렉션을 반환한다.
    Dim mSpaceObj As AcadObject
    Dim item As Variant
    Dim text As String
    Dim result As New Collection '한번에 선언 및 생성 - 초기화
    
    For Each item In ThisDrawing.ModelSpace
        On Error Resume Next '텍스트 스트링이 없으면 그냥 지나감
        text = "" '초기화
        Set mSpaceObj = item
        text = mSpaceObj.TextString
        If InStr(LCase(text), LCase(findingText)) Then '대소문자 구분하지 않음!
            result.Add text
        End If
    Next
    
    Set dwgTextFind = result
End Function

Sub resultOutput(outputFile, dwgName, textList)
'출력할 텍스트 파일명과 출력할 내용들을 받아서 _
'현재 열린 파일명과 검색된 스트링을 화면과 텍스트 파일에 출력하는 서브루틴.
    Dim fileNum As Integer
    Dim item As Variant
    
    fileNum = FreeFile()
    Open outputFile For Append As #fileNum '텍스트 파일을 추가 모드로 연다.
    
    Debug.Print dwgName
    Write #fileNum, dwgName
    
    For Each item In textList
        Debug.Print Chr(9) & item
        Print #fileNum, Chr(9); item
    Next
    
    Debug.Print "" '마지막에 빈 줄 추가
    Write #fileNum,
    Close #fileNum
End Sub

네. 이 프로그램은 잘 작동합니다. 적어도 제가 테스트한 한도 내에서는 말이죠.
하지만 왠지 제 실력 때문인지 뭔가 자꾸 부족하다는 생각이 드는군요. 굳이 dwgList를 전역으로 쓸 필요가 있었을까? 오류 처리는 어떻게 하는 것이 더 좋을까? main 프로시저는 정말 저게 최선인가? 더 모듈화할 수 있지 않았을까? 이런 생각이 자꾸 드네요.
 

그래서 질문드립니다. 이 프로그램에서 부족한 부분은 무엇이고, 어떤 식으로 수정하는 것이 좋을까요? 여러분의 고견을 기다리겠습니다.




작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. No Image

    국내 망사용료법 우려로 USTR 공식항의

    미국 무역대표부 ( USTR ) 가 한국의 넷플릭스 - 구글 등 글로벌 빅테크 겨냥해 추진하던 ' 망 사용료법' 에 대해 우리정부 상대로 통상 마찰 가능성 제기한걸로 확인되었습니다. 망사용료법은 이달 말 방한을 앞둔 조 바이든 미 대통령이...
    Date2022.05.14 소식 Bytitle: 명사수포인 Reply9 Views1095
    Read More
  2. No Image

    일론 머스크, 트위터 인수 일시 보류

    일론 머스크가 트위터의 인수 절차를 일시 보류한다고 발표했습니다. 다만 인수 자체는 진행 중이라고 덧붙이긴 했습니다. 트위터는 최근 SEC 규제 문서에서 스팸 봇이 전체 사용자의 5% 미만이며, 광고를 보는 사용자 수는 2억 2900만명...
    Date2022.05.13 소식 By낄낄 Reply4 Views1011
    Read More
  3. No Image

    업비트, 루나 거래지원 종료

    루나가 바이낸스에 이어 국내 거래소인 업비트에서도 거래를 중단합니다. 폭락한 와중에 거래소의 시세 차이를 이용해 벌었다느니, 폭락 후 잠깐 반등하는 순간을 노려서 벌었다느니 등등의 괴담(?) 등이 오갔는데, 업비트에서 거래 중단...
    Date2022.05.13 소식 By낄낄 Reply2 Views909
    Read More
  4. 바이낸스, 한국산 암호화폐 '루나' 상장폐지

    세계 최대 암호화폐(가상자산) 거래소 바이낸스가 한국 시간 기준 13일 오전 9시40분 루나(LUNA)를 상장 폐지한다고 공지했다. 저기 도원이란 사람은 루나를 만든 사람입니다.
    Date2022.05.13 소식 By낄낄 Reply5 Views1343 file
    Read More
  5. No Image

    나랏돈으로 비트코인 산 엘살바도르.."평가손실 490억원 추정"

    엘디아리오데오이는 부켈레 대통령이 트위터로 공개한 비트코인 매수 수량과 당시의 비트코인 평균 가격을 계산해, 그가 지금까지 9회에 걸쳐 총 2천301개의 비트코인을 총 1억447만달러(약 1천348억원)에 산 것으로 추정했다. 전날 비트...
    Date2022.05.13 소식 By낄낄 Reply5 Views1233
    Read More
  6. 이더리움, 2000달러까지 떨어짐

    이더리움이 2000달러 아애로 떨어졌다가 지금은 다시 올라오긴 했는데 하여간 2000달러 선까지 내려왔습니다. 2021년 7월 이후 최저치입니다. 이더리움 뿐만 아니라 요새 가상화폐 분위기들이 다들 안 좋지요. 이더리움은 다른 문제도 겪...
    Date2022.05.13 소식 By낄낄 Reply1 Views889 file
    Read More
  7. No Image

    질문에 올려야 하는 동영상은 어떤 사이트에서 업로드하는게 좋을까요?

    가끔 질문을 하다 보면 말로만으로 설명이 되지 않아서 동영상을 올려야 할 때가 있는데 GIF는 용량이 크고 유튜브는 계정 정보가 나오니 올리기가 좀 꺼러집니다. Vimeo도 알아보고 있는데 적합한 사이트 없을까요? 
    Date2022.05.12 질문 Byzc540 Reply7 Views431
    Read More
  8. 크롬 주소창이 까매졌어요...

        한글로 구글링 하니까 안나오길래 기글에 물어봅니다. 구글보다는 역시 기글이죠   뭐가 문제일까욥   + 테마는 별도로 안쓰고, 이렇게 색 조합만 바꿔 썼습니다. 근데 갑자기 주소창만 다크해졌네요...   + 진짜 갑자기 이렇게 됐고...
    Date2022.05.12 질문 Bytitle: 가난한까마귀 Reply5 Views690 file
    Read More
  9. No Image

    어도비 프리미어 프로 2022년 5월 업데이트

    어도비 프리미어 프로의 2022년 5월 업데이트 내용입니다. gif 파일로 내보낼 때 투명도를 설정 가능합니다. 제목/및 그래픽에서 개체 배포가 가능합니다. macOS에서 10비트 4:2:0 HEVC 내보내기 작업 시 속도가 10배 빨라졌습니다. AMD ...
    Date2022.05.12 소식 By낄낄 Reply0 Views660
    Read More
  10. No Image

    넷플릭스, 광고가 포함된 저가형 요금제와 계정 공유 단속?

    넷플릭스의 내부 편지에 의하면, 올해 말이 되기 전까지 광고를 보여주는 저가형 요금제를 추가하고 계정 공유를 막는 방안을 도입할 수도 있다고 합니다. 넷플릭스는 지난 몇 년 동안 가격을 꾸준히 올렸으며 올해는 가장 큰 폭의 인상을...
    Date2022.05.12 소식 By낄낄 Reply2 Views750
    Read More
  11. No Image

    국내서 차단됐던 해외 성인사이트 접속…방심위 "원인 파악 중"

    일부 누리꾼은 접속 인증 사진을 첨부한 채 새 정부가 정책을 바꿔 해외 성인물 사이트 접속 차단을 해제한 것 아니냐는 관측도 제기했다. 그러나 방송통신위원회 관계자는 "제보를 받고 알아봤지만, 정책에는 변화가 전혀 없다"고 밝혔다...
    Date2022.05.11 소식 By낄낄 Reply8 Views1431
    Read More
  12. https SNI 차단 일부 해제?

    SNI 차단되었던 일부 사이트가 현재 특정 통신사망에서 정상적으로 접속되고 있다고 합니다.   윤 대통령 임기 첫날에 일어난 현상이라 정부의 의도인지는 모르겠으나, 엠바고 걸린 것처럼 관련 뉴스 기사가 전혀 나오지 않는 상황에서 순...
    Date2022.05.11 소식 Bytitle: 삼성bianryeast Reply17 Views1288 file
    Read More
  13. 테라/루나 코인 대폭락

    달러와 1대 1로 교환을 보장하며 가치가 정해진 스테이블 코인인 테라 코인의 개발사가, 테라 코인 2천억원을 빼고 또 다른 테라 코인 고래도 1000억원을 빼는 등 거액이 빠져나가면서 테라 코인이 폭락하고, 테라 코인과 연동된 루나 코...
    Date2022.05.11 소식 By낄낄 Reply6 Views1730 file
    Read More
  14. No Image

    머스크 “트럼프 트위터 계정 영구정지 철회”

    머스크는 "계정 정지가 트럼프를 잠재우지 못했고, 오히려 우파들 사이 목소리를 키웠다"며 "도덕적으로 잘못됐고 바보 같은 조치였다"고 말했습니다. 그러면서 트위터를 '자유 광장'으로 만들기 위해 차별이 있어선 안된다며, 이...
    Date2022.05.11 소식 By낄낄 Reply1 Views639
    Read More
  15. No Image

    원스토어 공모가, 밴드 하단보다 낮은 2만5000원 유력

    기업공개(IPO)에 나선 애플리케이션(앱) 마켓 원스토어가 기관 수요예측에서 흥행에 실패하며, 공모가를 희망 공모가 범위(밴드) 하단보다 낮은 2만5000원 정도로 결정할 확률이 높은 것으로 알려졌다. 회사측은 낮은 가격에라도 상장을 ...
    Date2022.05.11 소식 By낄낄 Reply2 Views342
    Read More
목록
Board Pagination Prev 1 ... 178 179 180 181 182 183 184 185 186 187 ... 579 Next
/ 579

최근 코멘트 30개

AMD
한미마이크로닉스
더함
MSI 코리아

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소