2012-10-10 2 views
3

파일에서 정보를 읽고 가장 일반적으로 사용되는 단어를 분류하고 각 단어가 몇 번 사용되었는지 반환하는 사람이있었습니다. 명령 줄 인수에서 입력 한 있지만 동일한 스크립트를 실행할 가져오고 스크립트로 입력을 통해 실행되도록 파일 이름을 가져 가고 싶습니다. 내가 잘못하고있는 것을 찾을 수 없다.파일에서 가장 자주 사용되는 문자열

print "Type the name of the file: "; 
chomp(my $file = <>); 

open (FILE, "$file") or die; 

while (<FILE>){ 
    $seen{$_}++ for split /\W+/; 
} 

my $count = 0; 
for (sort { 
    $seen{$b} <=> $seen{$a} 
       || 
     lc($a) cmp lc($b) 
       || 
      $a cmp $b 
} keys %seen) 
{ 
    next unless /\w/; 
    printf "%-20s %5d\n", $seen{$_}, $_; 
    last if ++$count > 100; 
} 
close (FILE); 

순간에 내 결과는 다음과 같습니다

15      0 
15      0 
10      0 
10      0 
10      0 
5      1 
5      0 
5      0 
5      0 
5      0 

내가 원하는 결과는 다음과 같습니다

<word>    <number of occurances> 
<word>    <number of occurances> 
<word>    <number of occurances> 
<word>    <number of occurances> 
<word>    <number of occurances> 
<word>    <number of occurances> 
+5

그것은 경우에 도움이 될 거라고 말하고 싶은 이게 효과가 없다는 걸 말 했잖아요. –

+0

이 프로그램은 여러분이 보여준 결과를 보여주지 못했습니다. '% 본'의 카운트가 0 일 수는 없습니다. 하지만 품질이 떨어지는 Perl이 아니라면 프로그램이 올바르게 작동합니다. 다른 입력 파일을 사용해보십시오 – Borodin

답변

0

두 가지 :

  1. 당신은 사용자를 읽고 입력 한 변수에 파일 입력 0 대신에 $file.

    my $file= <>; 
    chomp($file); 
    

    또는 약식 :

  2. 당신은 당신이 후행 Newlin는 없애받을 사용자의 입력 씹는 데 필요한 두 번째 줄에서

    chomp(my $file = <>); 
    
+0

감사합니다. chomp를 추가했지만 출력이 변경되지 않았습니다. – John

0

당신 파일의 이름을 $ file이 아닌 $ file에 저장하고 싶습니다. 따라서 :

chomp(my $file = <>); 

chomp는 끝에서 Enter 키를 누를 때마다 줄 바꿈을 제거합니다.

+0

아, 고맙습니다. 필자는 무엇을 더 이상 모르는 지 여러 번 스크립트를 변경했습니다. – John

2

라인

printf "%-20s %5d\n", $seen{$_}, $_; 

는 의도의 반대입니다. $_는 문자열이며, $seen{$_}$_ 텍스트 (숫자)에 표시되는 횟수의 수, 그래서 당신도

printf "%-20s %5d\n", $_, $seen{$_}; 

또는

printf "%5d %-20s\n", $seen{$_}, $_; 
+0

아, 고마워. 그랬어. – John

+0

@ 존 : 문제가 해결 된 경우 대답을 "수락 됨"으로 표시하십시오. –

관련 문제