일/Data Mining

도스 개행문자 (0D 0A = CR LF) 포함된 텍스트 excel로 export 하기.

LEEHK 2008. 7. 9. 19:14

개행문자가 도스형식으로 되어있어 경우, 모든 줄 끝에 음표모양이 붙어 나오는 현상이 벌어질 때가 있습니다. 특히 문서 전체를 DB에 보관하는 경우 한 칼럼에 엔터기호까지 넣을 경우, 그 엔터기호가 도스형식 개행문자일 때 그런 문제가 발생합니다.

 

* 해결방법 :

개행문자 (0D 0A = CR LF) 를 (0A = LF) 로 변환합니다. 즉, text에서 헥사코드 '0d'를 없애줍니다. 

 

* 변환코드 :

data b;

set kk(obs=1 keep=question2);

question3=compress(question2,'0d'x);

run;

proc export data=rwork.b(obs=1) dbms=excel2000 replace outfile='c:/b.xls'; run;

  

* ex. 원본 'question2' -> '0D'를 없앤 뒤 'question3'

 

 

 

  

 

 * 참고자료 :

 

1. 도스 텍스트 파일과, 유닉스 텍스트 파일의 차이점: DOS-UNIX Text File

 

텍스트 파일은 운영체제에 따라 조금 달라서, 다른 운영체제에서 텍스트 파일을 읽으면, 행의 끝부분이 이상하게 나올 수 있습니다. 즉 줄바꿈 문자가 서로 다른 것입니다.

 

a. 도스의 텍스트 파일은, 각 행의 끝부분이 16진수로 0D 0A 라는 2개의 문자로 되어 있습니다. 옛날의 MS-DOS에서 시작되어, 현재 윈도우XP 이상의 운영체제에서도 계속 사용됩니다. 행갈이 문자가 2바이트이기에, 쓸데없이 파일 용량이 증가하고, 만약 0D 0A 의 짝이 맞지 않으면 복잡한 문제가 생기는 단점이 있습니다.

b. 유닉스/리눅스의 텍스트 파일은, 각 행의 끝부분이 16진수로 0A 라는 1개의 문자로 되어 있습니다.

c. 매킨토시(MAC)의 텍스트 파일은, 각 행의 끝부분이 16진수로 0D 라는 1개의 문자로 되어 있습니다.

 

즉, 줄바꿈 문자만이 다른 것입니다. 키보드의 Enter키를 쳐서 다음줄로 넘어갈 때 입력되는, 눈에 보이지 않는 문자가 "줄바꿈 문자" 또는 "개행문자"입니다.

그래서 유닉스 텍스트 파일을 윈도우의 메모장에서 보면, 모든 줄이 하나로 이어져 나와서 읽기 곤란합니다. 이때는 울트라에디트(UltraEdit) 같은 본격적인 텍스트 편집기로 읽어야 합니다. 그 외의 다른 부분은 똑같습니다.

 

2. C에서 출력형식 지정.

 

"\n" 으로 줄바꿈한 부분은 "유닉스 줄바꿈(0A = LF)"이고

"\r\n" 으로 줄바꿈한 부분은 "도스 줄바꿈(0D 0A = CR LF)"으로 강제로 지정되어 있습니다.

 

 

3. vim에서는 :set ff=unix  (from 응사마)