2010-08-06 4 views
1

파일이 생성 된 플랫폼과 관계없이 개조 문자를 chomp하는 방법을 찾고 있습니다.유닉스, 윈도우 및 맥 텍스트 파일에서 다중 플랫폼 chomp 작동

perlport#newlines에 의해 지정된 문제는 개행 문자가 각 플랫폼에서 다르게 인코딩이다 : 그러나 유닉스

012 \ \ 015 012 \ WINDOWS

015 \

, 씹는 플랫폼에 따라 다르며 실행중인 플랫폼의 문자 또는 $/ 변수로 설정된 문자 만 제거합니다.
# multiplatform chomp 
s/\015?\012?$//; 

가 올바른 해결책인가, 아니면 내가 어떤 경우에는 누락하고 더 나은 사람이있어 오전 :

지금까지 내가 일하게 될 것으로 보인다 다음 정규식 함께했다?

+0

당신이 가진 파일을 읽는 경우 '동안 () {...}'당신은 단지 유닉스 시스템에서 맥 파일을 하나 개의 라인을 얻을 수 있습니다. chomp가 이론적 인 목적을위한 것이 아니면, 파일을 논리적 인 라인으로 분리해야합니다. – jmz

+1

나는 마침내 맥 오에스가 마침내 위선적으로 일했다고 생각했다. 즉, OSX 이후로 * nix 방식으로. – cHao

+0

예, 기존 시스템 및 파일로 작업하지 않는 한 구형 Mac 라인 엔딩이 지금은보기 드뭅니다. 그리고이 경우조차도 파일을 처리하기 전에 파일을 유닉스 형식으로 변환하기 만하면됩니다. – Ether

답변

1

를 사용, 그래서 당신은

s/\v+$//; 

그러나 사용할 수 있어야합니다, 이것은 당신이 좋아하는 일을 차단 상관없는 것으로 가정 양식 피드 및 세로 탭.

2

왜 그냥 V는 수직 공백을 일치 \

s/\s+$//; 
+0

이것은 또한 선을 다듬을 것이지만, 더 우아한 해결책 인 것 같아서 그걸로 살 수 있습니다. 고마워! – Tomasz

0

모든 경우를 실제로 포착하려면 정규식을 사용하여 줄 바꿈을 제거하는 것이 좋습니다. 그러나 개행 문자가 있는지 확인하는 것은 좋지 않습니다. 개행 문자가없는 행과 행복하게 매치됩니다. 그 때문에 철자를 모두 써야합니다.

m{(\015|\015\012|\012)\z}; 

참고로 \z을 사용합니다. 이는 $이 캡처 그룹에서 훔치는 줄 끝의 개행과 일치하기 때문입니다.

현실적으로 "Mac"줄 바꿈에 대해 걱정할 필요가 없습니다. "Mac"개행 문자는 Mac OS 이전 버전을 나타냅니다. 그것은 입니다. 매우입니다. 그 시대의 파일을 보지 못할 것입니다. 나는이 파일을 여전히 작동하는 사람이라고합니다. Mac SE. 걱정할 필요가있는 것은 모두 Windows 및 Unix 개행입니다. 즉 일반적으로과 같이 이루어집니다 :

s{\015?\012\z}{}; 
관련 문제