2009-12-29 3 views
1

shift_jis 인코딩으로 파일을 처리해야합니다. 그러나 라인 종단 기호는 익숙하지 않은 형식입니다.CRLF, NEL 라인 터미네이터로 라인을 처리하는 방법은 무엇입니까?

> file record.CSV 
record.CSV: Non-ISO extended-ASCII text, with CRLF, NEL line terminators 

임은 일반을 사용하여 :

open my $CSV_FILE, "<:encoding(shift_jis)", $filename or die "Could not open: $CSV_FILE : $!"; 
while (<$CSV_FILE>) { 
    chomp; 
    # do stuff 
} 

을 여전히 각 레코드의 끝에 CR을 떠나 그러나.

이러한 유형의 파일을 종료하는 올바른 방법은 무엇입니까?

+0

호기심 : 파일의 각 레코드가 CR LF NEL로 종료된다는 의미입니까? 아니면 CR LF와 NEL과 같은 기록이 있습니까? – ZoogieZork

+2

NEL 문자가 있습니까? 그 문자는 Shift JIS (또는 그 문제에 대해서는 ASCII)에 없습니다. 위치 0x15에있는 문자는 NAK입니다. –

+0

멀티 바이트 문자 시퀀스의 (Shift-JIS에서) 0x85이므로 NEL 문자를 사용하지 않는 것이 좋습니다. 예 : 여기에있는 Shift-JIS 파일 세트는 매우 자주이 시퀀스를 포함합니다. 실제로이 한자 : 桁를 나타내는 "\ x8c \ x85". 그래서 당신은 아마 단지 CR을 제거하기를 원할 것입니다. 당신은 쉽게 정규식으로 할 수 있습니다. – Giel

답변

1

$_ =~ s/\r// 수동으로하지 않습니까?

편집 : 분명히, 당신은 또한

require Encode; 
use Unicode::Normalize; 

s/\x{0085}//g; 

NEL: Next Line, U+0085 문자를 제거 할 수 있습니다.

0

데이터를 누가 사용하는지 고려하고 이러한 파일을 생성 한 환경에 대해 자세히 알아야합니다. 최종 바늘 CSV 출력 파일이라면 끝내야 할 오래된 문자열 조작을 사용하고 (대신 CRLF 터미네이터를 생성하는 등) 좋을 것입니다.

관련 문제