2014-04-10 4 views
-2

기본적으로 조회 파일에서 읽을 수있는이 스크립트는 perl에 있지만이 파일을 실행하면 작동하지 않지만 작은 입력 파일에서는 작동하지만 큰 파일에서는 작동하므로 다른 carachteres를 반환합니다.펄 스크립트의 메모리를 늘리시겠습니까?

동등한 단어가 있다면 Dog = can이라는 단어가 있고, 입력 파일에 dog라는 단어가 있으면 Can로 변환됩니다.

1GB 입력 파일을 실행하기 위해 메모리 용량을 늘리려면 어떻게해야합니까? 난 당신이 큰 파일을 넣을 수 있도록 프로그램에 사용 가능한 메모리를 증가되어 수행 할 작업을 이해하지만

#!/usr/bin/perl 
use strict; 
use warnings; 
use autodie; 

open my $LOOKUP , "<" , "equivalents.txt"; 
open my $LIST , "<" , "input-text.txt"; 
open my $OUTPUT , ">" , "output.txt"; 

my %h; 

while (<$LOOKUP>) { 
    chomp; 
    my ($k, $v) = split /\s*=\s*/; 
    $h{$k} = $v; 
} 

while (<$LIST>) { 
    s/([a-zA-Z0-9]+)/$h{$1} || "[$1]"/eg; 
    print $OUTPUT $_; 
} 
+0

대용량 파일을 실행할 때 "다른 문자를 반환합니다"라고 말하면됩니까? 당신이 기억이 부족하다는 것을 어떻게 알 수 있습니까? – ThisSuitIsBlackNot

+0

작은 입력 파일을 실행할 때 작동하기 때문에 짐작할 수 있습니다. 아시아 언어와 같은 다른 문자 또는 동등한 파일에 지정된 문자. – alex

+0

프로세스가 메모리가 부족한 경우 얻을 수있는 동작이 아닙니다. 해시의 내용이 입력 파일의 내용과 일치하지 않는 것을 어떻게 확인 했습니까? – ThisSuitIsBlackNot

답변

0

, 당신은 메모리에 전체 파일을 넣어하지 않는 대안을 찾고 고려할 수 있습니다 대용량 파일을 조작하려는 경우 다음 모듈은 추가 메모리를 사용하지 않고 펄에서 큰 파일을 작업하는 방법을 보여줍니다 :

https://metacpan.org/pod/Tie::File

당신은이 방법으로 스크립트에서 사용을 시작 할 수 있습니다 무엇을

use Tie::File; 
tie @lookup, 'Tie::File', 'equivalents.txt' or die [email protected]; 

while (@lookup) { 
    chomp; 
    my ($k, $v) = split /\s*=\s*/; 
    $h{$k} = $v; 
} 
관련 문제