csv xml 변환
글쓴이: 세벌 / 작성시간: 토, 2010/05/01 - 11:21오전
csv 파일을 xml 파일로 변환하는 프로그램 찾고 있습니다.
utf-8 사용가능하며
무료 또는 공개 소프트웨어
위 조건만 만족하면 되겠는데...
인터넷에서 csv2xml 찾아서
날짜,이름,구분,제조사,모델,과,팀 20100429,세벌,PC,삼성,DM-C200-PP12G,총무과,전산팀
이런 형식의 CSV 파일을 변환시켜 봤더니
<row> <____________>20100429</____________> <______>세벌</______> <______>PC</______> <_________>삼성</_________> <______>DM-C200-PP12G</______> <______>총무과</______> <______>전산팀</______> </row>
위와 같은 식의 결과가 나오네요.
밑줄 대신
<row> <날짜>20100429</날짜> <이름>세벌</이름> <구분>PC</구분> <제조사>삼성</제조사> <모델>DM-C200-PP12G</모델> <과>총무과</과> <팀>전산팀</팀> </row>
이런 정도 결과가 나오는 프로그램 어떤 게 있는지 알려주셔요.
Forums:
저 정도는 그냥 간단하게 만드시면 될듯..
csv2xml.pl
data.csv
perl csv2xml.pl data.csv
리눅스가
리눅스가 아니라서
http://www.activestate.com/activeperl/
에서 윈도용 perl 받아서 설치하고
perl 실행 시켰는데...
만들어진 파일을 파이어폭스에서 띄워보니
이런 에러가 나네요.
파이어폭스에서 문제의 소스를 보면
이렇게 제대로 된 것 같은데... 인코딩 문제일까요?
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
윈도우즈에서 했다면
윈도우즈에서 했다면 기본 인코딩이 cp949입니다.
csv파일 안의 한글이 cp949인데 xml출력은 utf8으로 하고 싶으시면
csv2xml.pl
로 고쳐서 해보세요.
csv내의 한글이 utf8이면 인코딩 변환이 필요없습니다.(원래 스크립트를 쓰면 됨)
그런데 에러가 났다면
xml encoding 관련 헤더 ( http://www.cadvance.org/?leftmenu=doc/include/total_menu.asp&mainpage=doc/xml/xml_doc/xml_encoding.asp )
를 적절하게 넣어보세요.
이상하게도 오류의
이상하게도 오류의 원인은 <`date> 이군요. xml을 잘 모르지만 "`" 문자 자체가 xml entry 이름으로 허용이 되나요?
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
위의 xml을 긁어보니
위의 xml을 긁어보니 필드명 date 앞에 이상한 글자가 있는 것으로 봐서
BOM( http://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D ) 이 있는 utf8 형식의
csv파일을 읽어서 그런 것 같네요.
소스의
if ( $. == 1 ) { @elem = split /,/, $line; next; }
를
if ( $. == 1 ) { $line =~ s/^\xEF\xBB\xBF//; @elem = split /,/, $line; next; }
로 고치고 해보세요.
그래도 안되면 필드명 date앞의 정체불명의 문자를 제거하시고 해보심이~
ByteOrderMark 어떻게 빼나요?
xml 익히다가 BOM이라는 것도 알아야되다니... 이런게 있는 줄도 몰랐는데...
윈도에 기본으로 있는 메모장 utf-8 형식으로 저장하면 기본적으로 BOM 붙어서 생기는 문제 같네요. 근데 BOM 안들어가게 저장하려면 어떻게 하나요? 메모장에서는 선택의 여지 없이 그냥 BOM이 들어가나본데요...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
노트패드말고 다른 에디터 쓰세요
BOM의 목적이 아키텍쳐별로 big/little endian 에 따라 바이트순서를 알려주기 위한
목적인데 utf8은 바이트순서가 문제가 되지 않는 인코딩입니다만 MS는 어떤이유에선지
utf8에도 BOM을 넣습니다. 따라서 utf8 BOM을 넣지 않거나 삽입여부를 조정할 수 있는
vim, emacs등등의 전문 editor를 쓰시길 추천드립니다.
csv2xml.pl
덕분에 perl에 BOM에... 모르던 걸 많이 배우네요. aero님의 코드에 조금 덧붙인 perl 코드 올립니다.
덧. 그런데 제가 올린 perl 코드는 검정색으로만 나오는데 aero님의 코드는 색깔이 알록달록(?)하게 나오네요. 이건 어떻게 하면 되는지? 또 하나의 궁금증이 생겼네요...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
code 태그에 lang=perl을
code 태그에 lang=perl을 추가해보세요
댓글 달기