2014-03-27 2 views
0

입력 파일의 처음 5 줄을 읽고 명령 줄에서 perl 스크립트에 주어진 한 줄 (이 경우 4 줄) 만 인쇄하려고합니다. . 현재 줄 번호를 지정된 줄 번호와 비교하는 데 문제가 있습니다.첫 번째 5 줄을 읽고 지정한 줄을 인쇄하십시오.

은 여기 내 펄 스크립트의 중요한 부분입니다 :

# Variables 
my $sInputFile = $ARGV[0]; 
my $sOutputFile = $ARGV[1]; 
my $sRowExtractNumber = $ARGV[2]; 

# Open-Close/Exceptions 
open(my $in, "<", $sInputFile) or die "cannot open output file: $sOutputFile\n"; 
open(my $out, ">", $sOutputFile) or die "cannot open input file: $sInputFile\n"; 

# Script 
while (<$in>) { 
    if (1..5) { 
     print $out $_ if $_ == $sRowExtractNumber; 
    } 
} 

내가 말할 당 오류가 아니지만, 아무 것도 $out 파일에 인쇄되지되고있다.

목표를 달성하려면 어떻게해야합니까?

감사합니다.

답변

0

$. 변수는 현재 입력 행 번호입니다. 실수로 $_을 사용한 것으로 추정됩니다.

행 번호가 5보다 작거나 같음을 확인하지 않아도됩니다. 은 요청한 행과 일치합니다. 미리 입력을 확인해야 할 수도 있습니다.

모든 모듈 맨 위에 항상use strictuse warnings이어야합니다. 그것은 쉽게 간과 할 수있는 많은 사소한 실수를 알려주는 간단한 방법입니다. 그리고 지역 식별자에는 소문자를 사용해야합니다 : 대문자는 패키지 이름과 같은 전역에 예약되어 있습니다.

use strict; 
use warnings; 

my ($input_file, $output_file, $row_extract_number) = @ARGV; 

die "Line number must be five or less" if $row_extract_number < 1 or $row_extract_number > 5; 

open my $in, '<', $input_file or die qq{Cannot open "$input_file" for input: $!} 
open my $out, '>', $output_file or die qq{Cannot open "$output_file" for output: $!} 

while (<$in>) { 
    if ($. == $row_extract_number) { 
    print $out $_; 
    last; 
    } 
} 
+0

답변 맨 위에 감사드립니다. 그것들을 명심하십시오. –

관련 문제