Friday, July 28, 2006
오피스/엑셀2003] CSV 파일을 콤마(,)가 아닌 탭(Tab)으로 분리하기: Microsoft Excel 2003
제가 지금까지 CSV(Comma-Separated Values) 파일은 콤마로만 필드를 분리할 수 있는 줄 알았는데, 오늘 보니 탭문자(Tab키를 누르면 찍히는 공백 문자)로도 필드를 구분할 수 있었습니다.
엑셀 문서인 xls 는 이진 파일이기 때문에, 텍스트 편집기 등으로 편집을 할 수 없고 엑셀에서만 편집이 가능합니다. 그래서 각종 데이타를 CSV 파일로 저장해 두었는데, CSV라는 포맷이 좀 골치가 아프더군요. 각 필드를 콤마(,)로 분리하기 때문에, 셀의 내용 자체에 콤마가 들어가 있다면 쌍따옴표로 그 셀의 내용을 둘러싸 주어야 합니다. 그런데 만약 셀의 내용에 쌍따옴표 자체가 들어가 있다면 엄청나게 복잡해집니다.
그래서 CSV 파일을 "Perl(펄)"로 처리하는 프로그래밍을 하려다가 너무 복잡해서 그만둔 적이 있습니다.
사실 필드를 탭문자로 분리하면 간단하게 해결될 일이었습니다.
그런데 엑셀에서는, 탭으로 분리된 파일도 csv 라는 확장자를 붙일 수 있었고, 콤마로 분리된 CSV처럼 자연스럽게 처리할 수 있었습니다.
단, 조건이 있는데 탭으로 분리된 그 csv파일이 유니코드여야 하더군요. 일반 아스키 파일이라면 탭문자를 구분자(Separator)로서 인식하지 못했습니다. 또한 유니코드라도 16비트 유니코드가 아닌, UTF-8 유니코드는 글자들이 모두 깨져 버렸습니다.
'필드들이 탭으로 분리된 아스키 데이타 파일'을 유니코드로 저장하면, .txt 가 아닌 .csv 라는 확장자를 붙일 수 있습니다.
"[Perl/펄] 탭으로 분리된 CSV 파일에서 특정 필드만 추출: getField.pl" 이 게시물의 펄 스크립트는 일반 아스키 텍스트로 된 csv만 읽을 수 있습니다. 16비트 유니코드로 된 csv 파일을 읽을 수 있도록 버전업하려고 했는데, 펄은 16비트 유니코드를 잘 다루지 못하는 것 같았습니다. 잘 되지 않더군요. (업데이트: ▶▶ [펄/Perl] 윈도우용 유니코드(UTF-16LE) 파일 읽고 쓰기, 16비트 유니코드 입출력 참고)
그런데
위키 백과사전: CSV 항목을 보니, 제가 알고 있던 것보다 훨씬 더 복잡하군요. 셀에 개행문자까지 포함될 수 있다고 하는데...@_@
앞으로 CSV에 대해 계속 연구를 해보아야겠습니다...
엑셀 문서인 xls 는 이진 파일이기 때문에, 텍스트 편집기 등으로 편집을 할 수 없고 엑셀에서만 편집이 가능합니다. 그래서 각종 데이타를 CSV 파일로 저장해 두었는데, CSV라는 포맷이 좀 골치가 아프더군요. 각 필드를 콤마(,)로 분리하기 때문에, 셀의 내용 자체에 콤마가 들어가 있다면 쌍따옴표로 그 셀의 내용을 둘러싸 주어야 합니다. 그런데 만약 셀의 내용에 쌍따옴표 자체가 들어가 있다면 엄청나게 복잡해집니다.
그래서 CSV 파일을 "Perl(펄)"로 처리하는 프로그래밍을 하려다가 너무 복잡해서 그만둔 적이 있습니다.
사실 필드를 탭문자로 분리하면 간단하게 해결될 일이었습니다.
그런데 엑셀에서는, 탭으로 분리된 파일도 csv 라는 확장자를 붙일 수 있었고, 콤마로 분리된 CSV처럼 자연스럽게 처리할 수 있었습니다.
단, 조건이 있는데 탭으로 분리된 그 csv파일이 유니코드여야 하더군요. 일반 아스키 파일이라면 탭문자를 구분자(Separator)로서 인식하지 못했습니다. 또한 유니코드라도 16비트 유니코드가 아닌, UTF-8 유니코드는 글자들이 모두 깨져 버렸습니다.
결론
'필드들이 탭으로 분리된 아스키 데이타 파일'을 유니코드로 저장하면, .txt 가 아닌 .csv 라는 확장자를 붙일 수 있습니다.
"[Perl/펄] 탭으로 분리된 CSV 파일에서 특정 필드만 추출: getField.pl" 이 게시물의 펄 스크립트는 일반 아스키 텍스트로 된 csv만 읽을 수 있습니다. 16비트 유니코드로 된 csv 파일을 읽을 수 있도록 버전업하려고 했는데, 펄은 16비트 유니코드를 잘 다루지 못하는 것 같았습니다. 잘 되지 않더군요. (업데이트: ▶▶ [펄/Perl] 윈도우용 유니코드(UTF-16LE) 파일 읽고 쓰기, 16비트 유니코드 입출력 참고)
그런데
위키 백과사전: CSV 항목을 보니, 제가 알고 있던 것보다 훨씬 더 복잡하군요. 셀에 개행문자까지 포함될 수 있다고 하는데...@_@
앞으로 CSV에 대해 계속 연구를 해보아야겠습니다...
tag: office
엑셀 Excel | 워드 Word | VBA 매크로 | 오피스
<< Home