2014-09-16 1 views
4

, 나는이 방법을 알고Perl에서 파일을 읽는 방법과 존재하지 않는 경우 파일을 만드시겠습니까? 펄에서

open(my $in, "<", "inputs.txt"); 

는 파일을 읽고 있지만 그것은 단지 파일이 존재 그렇다면 않습니다. 다른 방법으로 수행

의 +와 하나

open(my $in, "+>", "inputs.txt"); 

는/파일을 작성 그렇게 내가 파일을 읽고 프로그램에 저장 할 수있는 기회를 얻을하지 않습니다 존재하는 경우 자릅니다.

파일이 존재하는지 여부를 고려하여 Perl에서 파일을 읽으려면 어떻게해야합니까?

그래, 내 코드를 편집했지만 여전히 파일을 읽을 수 없습니다. 문제는 루프에 들어 가지 않는다는 것입니다. 내 코드에 장난 스럽다?

open(my $in, "+>>", "inputs.txt") or die "Can't open inputs.txt : $!\n"; 
while (<$in>) { 
    print "Here!"; 
    my @subjects =(); 
    my %information =(); 
    $information{"name"}  = $_; 
    $information{"studNum"} = <$in>; 
    $information{"cNum"}  = <$in>; 
    $information{"emailAdd"} = <$in>; 
    $information{"gwa"}  = <$in>; 
    $information{"subjNum"} = <$in>; 
    for ($i = 0; $i < $information{"subjNum"}; $i++) { 
     my %subject =(); 
     $subject{"courseNum"} = <$in>; 
     $subject{"courseUnt"} = <$in>; 
     $subject{"courseGrd"} = <$in>; 
     push @subjects, \%subject; 
    } 
    $information{"subj"} = \@subjects; 
    push @students, \%information; 
} 
print "FILE LOADED.\n"; 
close $in or die "Can't close inputs.txt : $!\n"; 
+0

또한 먼저 존재를 확인 수를'경우 (-e "/ 파일 경로/파일") {...}' – vol7ron

+0

대신 파일 기반 데이터 저장을 위해 자신의 시리얼 라이저와 파서를 코딩 , 나는 그 작업의 대부분을하기 위해 ['YAML'] (https://metacpan.org/pod/YAML)이나 ['JSON'] (https://metacpan.org/pod/JSON)을 사용할 것을 권한다. 당신. – Miller

답변

7

를 사용하여 적절한 test file operator을 :

use strict; 
use warnings; 
use autodie; 

my $filename = 'inputs.txt'; 
unless(-e $filename) { 
    #Create the file if it doesn't exist 
    open my $fc, ">", $filename; 
    close $fc; 
} 

# Work with the file 
open my $fh, "<", $filename; 
while(my $line = <$fh>) { 
    #... 
} 
close $fh; 

그러나 파일이 새로운 내용 (내용 없음)이면 while 루프가 처리되지 않습니다. 테스트가 잘된 경우에만 파일을 읽는 것이 더 쉽습니다.

if(-e $filename) { 
    # Work with the file 
    open my $fh, "<", $filename; 
    while(my $line = <$fh>) { 
     #... 
    } 
    close $fh; 
} 
+0

고마워요! -e로 새로운 것을 배웠고 현재 작동 중입니다. – ejandra

0

당신은 추가/읽기 +>>을 사용할 수는 존재하지 않는 경우 파일을 작성하지만, 그것을 잘라하지 않습니다

open(my $in,"+>>","inputs.txt"); 
0

먼저 파일의 존재 여부를 확인하십시오. 아래의 샘플 코드 확인 :

#!/usr/bin/perl 
use strict; 
use warnings; 
my $InputFile = $ARGV[0]; 
if (-e $InputFile) { 
    print "File Exists!"; 
    open FH, "<$InputFile"; 
    my @Content = <FH>; 
    open OUT, ">outfile.txt"; 
    print OUT @Content; 
    close(FH); 
    close(OUT); 
} else { 
    print "File Do not exists!! Create a new file"; 
    open OUT, ">$InputFile"; 
    print OUT "Hello World"; 
    close(OUT); 
} 
관련 문제