2012-10-17 3 views
-1

IP 주소 및 호스트 이름의 텍스트 파일을 열고 새 줄로 구분하여 Perl 파일을 작성하여 해시로로드하도록 지정했습니다. 그런 다음 사용자가 파일 내에서 검색 할 내용을 묻는 메시지가 표시됩니다. 결과가 발견되면 프로그램은 값과 키를 인쇄하고 사용자가 아무 것도 입력하지 않을 때까지 입력을 다시 요청합니다. 나는 끝까지 가깝지는 않지만 약간의 지침이 필요합니다. 나는 여기에서 몇몇 Google-Fu를 사용하여 몇몇 부호를 함께 cobbed.텍스트 파일을 해시로 열고 해당 해시를 검색합니다.

아마 눈부시게 알 수있는 바와 같이
#!/usr/bin/perl 

print "Welcome to the text searcher! Please enter a filename: "; 

$filename = <>; 

my %texthash =(); 

open DNSTEXT, "$filename" 
    or die! "Insert a valid name! "; 

while (<DNSTEXT>) { 

    chomp; 
    my ($key, $value) = split("\n"); 

    $texthash{$key} .= exists $texthash{$key} 
        ? ",$value" 
        : $value; 
} 
print $texthash{$weather.com} 

#print "What would you like to search for within this file? " 

#$query = <> 

#if(exists $text{$query}) { 

, 나는 꽤 잃었어요 :

여기에 진행중인 내 작품입니다. 해시에 파일을 올바르게 삽입하고 있는지 또는 디버깅 할 값을 출력하는 방법을 잘 모르겠습니다.

+1

while () {'한 줄만 읽습니다. 따라서 '\ n'에서 분리 할 수 ​​없습니다. 첫 번째 행을 다른 행을 저장 한 다음 함께 저장해야합니다. –

+0

참조를 인쇄하려면 'Data :: Dumper'를 사용하십시오. 'Use Data :: Dumper; –

답변

-1

여기서 문제는 입력 파일의 모양을 알 수 없다는 것입니다. 입력 파일이 어떻게 든 보이는 것을 가정 같은 :

key1,value1 
key2,value2 
key3,value3 

(또는 기타 유사한 방식으로,이 경우 키와 값 쌍은 쉼표로 구분됩니다에서),이 작업을 수행 할 수 있습니다 :

my %text_hash; 

# the my $line in the while() means that for every line it reads, 
# store it in $line 
while(my $line = <DNSTEXT>) { 
    chomp $line; 

    # depending on what separates the key and value, you could replace the q{,} 
    # with q{<whatever is between the key and value>} 
    my ($key, $value) = split q{,},$line; 

    $text_hash{$key} = $value; 

} 

그러나 예, 파일의 내용이 어떻게 나타나는지 알려주세요.

+0

파일은 1 행에서 2 행까지의 상태를 나타내는 * newline *으로 구분 된 호스트 이름과 IP 주소로 구성됩니다. 또한,'split'의 첫 번째 인수는 정규 표현식이며 * not * 문자열. 'q()'를 사용하면 오도 된 것이다. 오히려'/, /','m (,)'또는'qr (,)'를 사용하십시오. – amon

+0

오 죄송합니다. 그것을 잡을 수 없었다. 내 삶은 거짓말이었다. 나는 'split'의 첫 번째 인수가 문자열이라고 생각했다. 고마워. :) –

관련 문제