2017-09-26 3 views
1

나는 random.org의 GCD를 계산하고 텍스트 파일에서 그 숫자를 잡아 내고 있습니다. 다음은 앞에서 작성한 PRNG로 위의 작업을 수행하는 프로그램입니다.텍스트 파일에서 읽기 및 배열 정보 넣기

#!/usr/bin/perl 
use strict; 
use warnings; 
my $range = 100; 
my $gcdcount = 0; 
sub gcd_iter($$) { 
    my ($u, $v) = @_; 
    while ($v) { 
     ($u, $v) = ($v, $u % $v); 
    } 
    return abs($u); 
} 
for (my $count=0; $count<=5000; $count++) { 
    my $random_numx = int(rand($range)); 
    my $random_numy = int(rand($range)); 
    my @pair = ($random_numx, $random_numy); 
    if (gcd_iter($random_numx, $random_numy) == 1) { 
     $gcdcount++; 
    } 
} 
print "The GCD Count for PRNG #1 is $gcdcount\n"; 

나는 꽤 똑같은 일을하고 있지만 텍스트 파일에서 숫자를 가져옵니다. 행을 분리 한 다음 수식을 통해 변수에 할당 할 수있는 형식으로 번호 쌍을 얻으려면 어떻게해야합니까? 여기에 지금까지 무엇을 가지고 :

당신은 올바른 궤도에 있지만 입력하여 혜택을 누릴 수 있습니다
my $filename = 'xxxxx'; 
open(my $fh, $filename) 
or die "Could not open file '$filename' $!"; 
sub gcd_iter($$) { 
    my ($u, $v) = @_; 
    while ($v) { 
     ($u, $v) = ($v, $u % $v); 
    } 
    return abs($u); 
} 
for (my $count=0; $count<=5000; $count++) { 
    if (gcd_iter($) == 1) { 
     $gcdcount++; 
    } 
} 
while (my $row = <$fh>) { 
    chomp $row; 
    foreach ($row) { 
     my @pair = split('s+', $_);  
    } 
} 

답변

0

perldoc -f split 

펄이 우수한 내장 된 설명서를 참조하십시오.

foreach ($row) { 
    my @pair = split('s+', $_); 
} 

에 : 나는 당신의 라인 변경됩니다

my @pair = split(/\s+/, $row); 

$pair[0]$pair[1]$num1$num2을 설정 ...하거나 사용

my ($num1, $num2) = split(/\s+/, $row); 

이 두 가지를 얻을 수 당신이 직접 관심있는 스칼라.
즉, 행 (이미 사용자가 $row)이 필요없고 공백에 대한 약식 패턴 일치 인 \s입니다. 행운을 빌어 요!

+0

아주 좋은 대답입니다. 그러나, 나는 당신이 조금 그리워했다고 생각합니다. '@ 쌍 '(또는'$ num1'과'$ num2') 변수는 어휘이며 아무 것도하지 않습니다. OP는 실제로 그것을 사용하거나 인쇄해야합니다. – simbabque