2014-10-31 1 views
2

아래에는 조작하려는 데이터 목록이 있습니다. 난 열을 분할하고 다른 배열로 다시 합치기를 원합니다.chomp 사용 방법

배열의 마지막 요소를 세 번째 배열로 바꾸고 싶지만 문제가 있습니다. 배열의 마지막 요소에는 마지막에 줄 문자가 포함되어 있기 때문에 내가 thrid로 전환하면 줄 바꿈이 모두 실행됩니다.

CODE

while (<>) { 
    my @flds = split /,/; 
    DO STUFF HERE; 
    ETC; 
    print join ",", @flds[ 0, 1, 3, 2 ]; # switches 3rd element with last 
} 

샘플 데이터

1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 

MY 결과는 - 라인을 아래로 쫓겨.

1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name,Hello 

* 원하는 결과 **


나는 그것이 씹는 함께 할 수있는 뭔가가 알고 있지만 내가 첫 번째 또는 마지막 요소를 씹는 경우, 모든 \ n을 제거하는

1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
. 그 사이에 아무 것도 사용하지 않으면 아무 일도 일어나지 않습니다. 누구든지 도와 줄 수 있습니까? 각각의 라인이 처리로 while 루프

+1

시스템에 'perldoc'이있는 경우 특정 기능에 대한 질문이있을 때 먼저 사용하는 것이 좋습니다. . 쉘에서 실행하는 것이 매우 편리하며 문서가 정말 좋습니다. 'perldoc -f '또는이 경우에는''perldoc -f chomp' '(http://perldoc.perl.org/functions/chomp.html)를 실행하십시오. 온라인 버전). 'chomp'에 대한 문서에는 코드와 매우 흡사 한 코드 예제가 들어 있습니다. – ThisSuitIsBlackNot

+0

매우 근사합니다! 팁을 많이 주셔서 감사합니다. 나는 많은 시간 동안 기능에 대한 어려운 예제가 필요하다는 것을 알게되었습니다! @ThisSuitIsBlack 아니요 – JDE876

답변

4

chomp은 인수에서 마지막 줄 바꿈을 제거합니다. 4 개의 입력란 중 어느 것도 에 실제로는에 개행 문자가 포함되어서는 안되기 때문에 데이터 처리를 위해 수행하려는 작업 일 것입니다. 당신은 당신도 필드에 라인을 분할하기 전에 chomp으로 줄 바꿈을 제거하고 최종 인쇄 문을 각 레코드 후 줄 바꿈을 추가 할 수 있습니다

while (<>) { 
    chomp; # Automatically operates on $_ 
    my @flds = split /,/; 
    DO STUFF HERE; 
    ETC; 
    print join(",", @flds[0,1,3,2]) . "\n"; # switches 3rd element with last 
} 
+0

또는 'say join ",", @flds [0,1,3,2]; – ikegami

0
while (<>) { 
    chomp; 
    my @flds = split /,/; 
     ... rest of your stuff 
} 

, $_는 광고의 내용으로 설정된다. chomp은 기본적으로 $_에서 작동하고 후행 줄 바꿈을 제거합니다. split도 기본으로 $_을 사용하므로 문제가 없습니다.

기술적으로 무엇이 일어날 지 정확히 @flds의 마지막 요소는 줄에서 후행 \n을 포함합니다. 예 : $flds[3].

0

씹는() 함수는 (일반적으로) 제거 어떤 개행 문자 문자열 끝에서. 우리가 보통 말하는 이유는 실제로 $/(입력 레코드 분리 기호)의 현재 값과 일치하는 문자를 제거하고 $/default가 개행 문자를 제거한다는 것입니다.

예제 1. 문자열 채우기 파일이나 사용자로부터 데이터를 읽을 때 대부분 chomp()를 사용합니다. 예를 들어 표준 입력 스트림 (STDIN)에서 사용자 입력을 읽는 경우 각 데이터 행과 함께 줄 바꿈 문자가 표시됩니다. chomp()는 정규 표현식을 작성할 필요가 없으며 필요한 문자를 제거하는 것에 대해 걱정할 필요가 없기 때문에이 경우에 유용합니다.

while (my $text = <STDIN>) { 
chomp($text); 
print "You entered '$text'\n"; 
last if ($text eq ''); 

}

사용 예제와이 프로그램의 출력은 다음과 같습니다

당신은 당신은 '텍스트'를 입력 한 텍스트 이

입력 '단어'를 입력 단어를 ''