ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Txt 파일내에 있는 해당 데이터(단어)를 추출하여 Data Count 수행
    Perl 2015. 3. 25. 13:05

    #!/usr/bin/perl

    use strict;

    use warnings;


    print "===============================\n";

    print " Perl_TEST(File Input & Count Data)\n";

    print "===============================\n\n";


    # ~.txt 파일을 open 해서 한 객체에 넣는다.

    open (INFO, 'test1.txt' );


    # 객체의 내용에 대하여 배열에 넣는다.

    my @lines = <INFO>;


    # 배열에 공백을 제거한다.

    @lines = trim(@lines);


    # Uniq 하게 추출된 단어들단 uniqq 배열에 넣는다.

    my @uniqq = uniqElements(@lines);


    # 객체를 닫는다, 이후부터는 배열만 가지고 이어간다.

    close(INFO);


    # 전체 단어 출력

    #print @lines;

    my $scount = 0;

    my $dcount = 0;

    # 총 단어의 수 출력

    #print "\n 총 단어의 수 :: ", @lines.length, "\n\n";


    print "    [중복횟수(퍼센트)]  :: [데이터]\n\n";

    # 반복문을 통해, 0부터 배열 내용의 길이만큼(단어의 수만큼) 반복한다. 예) 단어의 수가 10개면 10번 반복

    for( my $i=0; $i < @uniqq.length;$i++) {

    # 몇번 반복되었는지 판단하기 위한 변수 설정(count)

    my $count = 0;


    # 현재 반복된 순번

    # print $i, "\n";


    # 현재 반복된 순번의 단어

    # print $uniqq[$i]

    # for 문안에 for 문을 돌려 $i 번째 단어가 반복된 수를 구한다.

    for( my $j=0; $j < @lines.length;$j++) {

    # 유니크한 배열의 단어들과 전체 단어들과 비교해서 동일한 단어의 횟수(count)를 파악한다.

    if($uniqq[$i] eq $lines[$j]){

    $count++;

    }

    }

    if($count == 1){

    $scount++;

    }else{

    $dcount++;

    }

    # 해당 단어가 몇번 반복되었는지 판단한다.

    print " ", $count, "회","(",100*$count/@lines.length,"%) :: ", $uniqq[$i], "\n";


    }

    print "-----------------------------------\n\n";

    print " * 중복을 포함한 총 데이터(단어)의 수 :: ", @lines.length, "\n";

    print " * 중복을 제거한 총 데이터(단어)의 수 :: ", @uniqq.length, "\n\n";

    print " * 중복이 아닌 데이터 개수 :: ", $scount, "\n";

    print " * 중복인 데이터 개수 :: ",$dcount, "\n\n";

    print "-----------------------------------\n";




    # 공백을 지우는 Sub 펑션

    sub trim {

      my @result = @_;


      foreach (@result) {

        s/^\s+//;          # 앞쪽 공백 지우기

        s/\s+$//;          # 뒤쪽 공백 지우기

      }

      return wantarray ? @result : $result[0];

    }


    # 단어들 중에 Uniq 한 단어들로만 추출한다.

    sub uniqElements {

      my ($item, %seen, @result);


      foreach $item (@_) {

        push(@result, $item) unless $seen{$item}++;

      }


      return @result;

    }

    'Perl' 카테고리의 다른 글

    split 사용법  (0) 2014.12.23
    Perl 주석  (0) 2014.12.03
    Perl Data Types  (0) 2014.11.18
    [Perl] 변수 모음  (0) 2014.11.18
Designed by Tistory.