2012-05-24 2 views
3

저는 Perl을 처음 사용하고 Excel 파일을 읽고 해당 데이터를 텍스트 파일로 내보내는 Perl 스크립트를 디코딩하려고합니다. 스크립트의 단계 중 하나가 이상하게 수행됩니다. 이것은 단계 :Perl Excel 파서가 잘리는 열

@array_name = grep {$_} @array_name; 

0 경우이 단계는 단지 마지막 열을 절단; 그렇지 않으면 제대로 작동합니다. 이 단계를 제거하면 값이 0 인 마지막 열이 돌아 오지만 내 소스 Excel 파일의 일부가 아닌 추출물에 더미 NULL 열이 포함되어 있습니다.

이 단계를 이해할 수 있도록 도와 주실 수 있습니까?

답변

0

grep은 기본적으로 배열에서 모든 참값을 반환하고 0은 거짓으로 보간됩니다. @b에 실제 값을 필터링하는 데 여기에 사용되는 예를 grep를 들어

,

my @dirty = (0,1,2,3,,0,5,); 
my @clean = grep {$_} @dirty; 
for(@clean) {print "$_\n";} 

반환

1 
2 
3 
5 

0을 보존하기위한 약간의 트릭이 그렙 인수에 줄 바꿈을 추가 포함 :

my @dirty = (0,1,2,3,,0,5,); 
my @clean = grep {"$_\n"} @dirty; 
for(@clean) {print "$_\n";} 

다음 중 어떤 것을 반환합니까?

0 
1 
2 
3 
0 
5 
+0

이 더러운 트릭은 비어 있거나 정의되지 않은 셀을 건너 뛰지 않습니다. – dgw

1

grep 명령은 비어있는 내용을 필터링합니다. 따라서 사실로 평가되지 않는 모든 것은 폐기됩니다. 빈 셀과 0이 포함 된 셀은 제거됩니다. 빈 셀을 제거하려는 경우 대신

@array_name = grep { defined && length } @array_name ; 

대신 사용할 수 있습니다.

+0

이것은 보석처럼 작동합니다. 정말 고마워, 정말 고마워. – user1415006

+0

안녕하세요 dgw, 내가 빈 값이있는 열을 제거하는이 줄을 포함 할 때 한 가지 더 많은 문제에 직면하고 있습니다. 나는 최종 결과물에이 칼럼이 필요하다. 제안은 – user1415006

+0

@user1415006이다. 그런 다음 그냥'@array_name = grep {defined} @array_name; '이라고하면 그냥 undef 값이 제거된다. – dgw

1
$A->[$i][10]=~s/\n//g; 

$variable_value =~s/\n//g; 

$variable_value은 값이 저장되는 변수입니다.

다음 줄이 제거됩니다.