2012-05-24 1 views
3

필링 (Perling) 이래로 몇 달이 지났지 만, 왜 이런 일이 벌어지는 지 완전히 궁금해합니다 ...왜 Perl은 내 인쇄 결과에 영향을 미칩니 까?

나는 OSX를 사용합니다. 각 라인을 읽은 후

가 나는 파일을 읽고 있어요 때문에

XXX, 20120803, 0100, KWH, 0.2809, A, YYY

같은 표준 출력 라인에

08/03/2011 01:00 PDT,1.11

같은 파일에 라인을 변환하기 위해 노력하고있어, 나는 chomp 원하는 그러나, 내가 chomp 일 때, 나는 나의 인쇄가 엉망이되어 버린다. chomp이 아닐 때 인쇄가 잘됩니다 (여분의 개행을 제외하고 ...). 무슨 일 이니? 거기에 chomp 호출

while(<SOURCE>) { 
    chomp; 
    my @tokens = split(' |,');  # @tokens now [08/03/2011, 01:00, PDT, 1.11] 

    my $converted_date = convertDate($tokens[0]); 
    my $converted_time = convertTime($tokens[1]); 

print<<EOF; 
$XXX, $converted_date, $converted_time, KWH, $tokens[3], A, YYY 
EOF 
} 

는 출력이 모두 혼합되어 거기에서 chomp 호출하지 않고

, A, YYY10803, 0100, KWH, 1.11

, 그것은 올바른 순서 적어도 인쇄,하지만 여분의 새로운 라인 : 그것은 첫 번째 줄 "위에"줄 바꿈을 덮어처럼 거기에 chomp로, 그것의

XXX, 20110803, 0100, KWH, 1.11 
, A, YYY

공지있다. $|=1; 자동 플러시를 추가했지만 여기에서 무엇을해야할지 모르겠습니다.

생각하십니까? 그리고 미리 감사드립니다 ....

+2

어디에서 데이터 파일을 가져 옵니까? 홀수 줄 끝 문자가 가능합니까? –

+2

유닉스에서 Windows 파일을 다시 읽는 것이 일반적인 문제입니다. 이전 토론 참조 : http://stackoverflow.com/questions/881779/neatest-way-to-remove-linebreaks-in-perl http://stackoverflow.com/questions/1836217/perl-or-something-else-m -problem http://stackoverflow.com/questions/7534591/cr-vs-lf-perl-parsing – daxim

답변

9

입력란은 CR LF로 끝납니다. LF 만 제거하고 있습니다. 또한 펄에 전달하기 전에 파일을 변환 할 dos2unix 명령 줄 도구를 사용할 수

s/\s+\z//; 

: 간단한 해결책은 chomp 대신 다음 사용하는 것입니다.

+0

Duh! 정말 고마워. 그거였다. – user311121

1

문제는 당신이 DOS 줄 끝이 있고 Perl의 유닉스 빌드에서 실행 중입니다.

이 해결책 중 하나는 PerlIO::eol입니다. 설치해야 할 수도 있지만 프로그램에 use 줄이 필요하지 않습니다.

그런 다음

binmode ':raw:eol(LF)', $filehandle; 

을 기록 할 수있는 후 관계없이 파일의 형식이나 소스의 라인은 표준 "\n"으로 종료됩니다 읽기.