AutoCAD의 파일 버전 정보와 변환 방법

모든 소프트웨어가 그렇듯이 AutoDesk사의 AutoCAD도 끊임없이 새 제품을 낸다. 그래서 같은 확장자라고 하더라도 파일의 버전이 달라서 열지 못하는 경우가 많이 생긴다. 파일을 못 열면 도대체 버전이 얼마나 달라서인지를 알고 싶을 때가 많다.
아래의 표는 AutoCAD파일을 윈도 메모장에서 읽을 때 얻을 수 있는 것이다.
문서의 시작이 AC1021로 되어 있다. 이 파일이 AutoCAD 2007/2008/2009에서 생성되었음을 의미한다.
사용자 삽입 이미지
AutoCAD 파일 문서의 맨처음과 해당 버전(출처 : ALT CONTROL I.T.)

AC1024 AutoCAD 2010
AC1021 AutoCAD 2007/2008/2009
AC1018 AutoCAD 2004/2005/2006
AC1015 AutoCAD 2000/2000i/2002
AC1014 Release 14
AC1012 Release 13
AC1009 Release 11/12
AC1006 Release 10
AC1004 Release 9
AC1003 Version 2.60
AC1002 Version 2.50
AC1001 Version 2.22
AC2.22 Version 2.22
AC2.21 Version 2.21
AC2.10 Version 2.10
AC1.50 Version 2.05
AC1.40 Version 1.40
AC1.2 Version 1.2
MC0.0 Version 1.0

아울러 꼭 유료의 AutoCAD가 설치되어 있지 않아도 무료의 DWG Trueview를 설치하면 버전을 변환할 수 있다.

ASCII(Plain Text) vs. Binary Files

ASCII File
ASCII = American Standard Code for Information Interchange
글자의 내용만 있고, 형식을 저장하지 않는다(plain text).
메모장과 같은 Text Editor로 보기와 편집이 가능하다.
호환용 형식(interchange format)으로 많이 사용된다.
파일의 크기가 커질 수 있다.
Character Set의 문제(encoding-decoding)가 발생할 수 있다.(Unicode, EUC-KR 등)
관련 확장자 : TXT, XML, DXF, CSV, PS
관련사이트 : Power of Plain Text

Binary Files
자료를 0과 1의 형태(이진 즉 binary)로 저장한다.
소프트웨어 제작사의 노하우가 숨어져 있다. 일반적으로 그 구조가 어떻게 되어 있는지 알 수 없다. 따라서 특정 편집기를 통해서 열기와 편집이 가능하다.
문서 파일의 경우, 글자의 내용뿐만 아니라 형식(글자체, 모양 등)도 저장한다(formatted text, styled text or rich text).
관련 확장자 : HWP, DOC, DWG, XLS, PDF

파일경로와 파일이름

1. 프로그램이 시작된 경로를 알아내기
– App.Path 함수를 사용한다.

2. App.Path 사용시 주의할 점
– 루트 디렉토리일 경우 “\”를 함께 반환한다.
– 루트 디렉토리가 아닐 경우, 끝에 “\”가 없다.

3. 더 좋은 App.Path (출처 : http://www.freevbcode.com/ShowCode.asp?ID=878)
항상 끝에 “\”가 붙게 한다.
[vb]Public Function AppPath() As String
Dim NewPath As String
NewPath = App.Path
If Right(App.Path, 1) <> “\” Then NewPath = NewPath & “\”
AppPath = NewPath
End Function[/vb]
사용예
[vb]’Open “C:\IA Program\입력값\FormData_5장.txt” For Input As #1
Open AppPath & “입력값\FormData_5장.txt” For Input As #1[/vb]

4. 프로그램 시작 경로에서 파일명 가져오기
[vb]Function GetFileName(sFileName As String) As String
Dim FullFilename As String

‘파일이름
If Right$(Trim$(App.Path), 1) = “\” Then
FullFilename = App.Path + sFileName
Else
FullFilename = App.Path + “\” + sFileName
End If

GetFileName = FullFilename

End Function[/vb]
사용예 : FormData_5장.txt를 프로그램시작경로에서 찾는다.
[vb]myFile = GetFileName(“FormData_5장.txt”)[/vb]

5. 전체파일명에서 경로만 뽑아내기
[vb]Function GetPath(strFullFilename As String) As String

Dim strPath As String
strPath = Mid(strFullFilename, 1, InStrRev(strFullFilename, “\”, , vbTextCompare) – 1)
If Len(strPath) = 0 Then
strPath = App.Path
End If
GetPath = strPath

End Function[/vb]

호환성 : Visual Basic 5, 6

DXF를 읽어오는 모듈을 정리

과거 동적배열로 된 변수들을 Generic.List와 Generic.Dictionary로 변경하였다. 파일 읽는 시간이 놀랍게 줄었다.
리스트와 딕셔너리도 마치 동적배열처럼 사용할 수 있다.
[vbnet]’옛날 코드
Dim DXFEntities() As SV_DXFEntity
ReDim Preserve DXFEntities(k)
DXFEntities(k) = New SV_DXFEntity[/vbnet]

[vbnet]’개체 클래스
Public Class SV_DXFEntity
Private m_Type As String ‘자료명
Private m_CodeValue As Generic.Dictionary(Of Integer, String)

Public Sub New()
m_CodeValue = New Generic.Dictionary(Of Integer, String)
End Sub
Default Public Property CodeValue(ByVal groupCode As Integer) As String
Get
Return m_CodeValue(groupCode)
End Get
Set(ByVal value As String)
m_CodeValue(groupCode) = value
End Set
End Property
Public Property Type() As String
Get
Return m_Type
End Get
Set(ByVal value As String)
m_Type = value
End Set
End Property
Public Sub Add(ByVal myCode As Integer, ByVal myValue As String)
If m_CodeValue.ContainsKey(myCode) Then Exit Sub
m_CodeValue.Add(myCode, myValue)
End Sub

End Class[/vbnet]

[vbnet]’엔티티를 원소로하는 리스트 선언
Dim DXFEntities As Generic.List(Of SV_DXFEntity)[/vbnet]

한글 텍스트 파일 읽기

한글 텍스트 파일을 읽기 위해서는 인코딩을 다음과 같이 지정해 주어야 한다.

[vbnet]’파일스트림 열기
Dim fs As New FileStream(“myhangultext.txt”, FileMode.Open, FileAccess.Read)

‘스트림리더 열기
‘*** 주의 : System.Text.Encoding.Default를 지정해야 ‘한글’을 읽어올 수 있음!!!
‘시스템의 현재 ANSI 코드 페이지에 대한 인코딩을 가져옵니다
‘Dim Reader As New StreamReader(fs, System.Text.Encoding.Default)
‘–> 사실 이렇게 하면, 한글윈도우이어야 읽을 수 있다.
‘명확히 한글을 읽을 수 있게 하려면 다음과 같이 해야 한다.
Dim Reader As New StreamReader(fs, System.Text.Encoding.GetEncoding(949))
‘여기서 949는 한글에 대한 code page이다.

‘자료를 읽기
Call Parse(Reader)

‘스트림리더 닫기
Reader.Close()
[/vbnet]