세로형
Recent Posts
Recent Comments
Link
11-25 00:03
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

펄 파일 입출력(perl fileio) 공부 본문

perl

펄 파일 입출력(perl fileio) 공부

이수진의 블로그 2017. 10. 31. 11:30
반응형
728x170

안녕하세요~

오늘은 펄 프로그래밍에서 파일 입출력을 하는 방법에 대해 공부해 볼까 합니다

여타 다른 언어와 마찬가지로 펄에도 파일 입출력이 있습니다

파일을 읽고, 쓰고 하는 과정이죠

간단한 예제로 공부해보죠!

 

먼저 진행할 파일이 필요합니다

 

저는 펄 워크스페이스에 위와 같은 텍스트 파일을 하나 준비했습니다.

 

안에 내용은 아래와 같습니다.

1
2
3
4
5
6
7
8
randal
aabbcc
fred
camel
soojin
lee
lee
soojin

cs

 

이제 이 파일을 읽어서 출력을 해봅시다

먼저 기본적인 문법은 이렇게 됩니다.

open( ) 함수를 써서 파일을 열어줍니다.

open(접근자, "파일명"); 이렇게요

이렇게 하면 read가 되는 겁니다.

쓰기(write), 덧붙이기(append)는 어떻게 할까요?

똑같이 open()을 씁니다.

쓰기를 하려면 open(접근자, ">파일명")이 됩니다

덧붙이기를 하려면 open(접근자, ">>파일명")이 됩니다

 

무슨 말인지 잘 모르겠죠?

예제로 바로 가볼게요!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
init_words();
 
sub init_words{
    open(WORDLIST, "test2.txt"|| die "파일을 열 수 없음 : $!";  #파일은 연다. 그 접근하는 이름은 WORDLIST로 둔다.
    #die는 말 그대로 뒈졌을때(실패했을 때) 쓰는 함수이다.  OR 연산을 통해 성공 혹은 실패를 결정한다.
    # $! 는 오류 메세지 같은거 출력해주는 도움을 준다.
    
    #만약 write를 하고 싶으면 open(WORDLIST, ">test2.txt");
    #덧 붙이고 싶으면(append) open(WORDLIST, ">>test2.txt"); 와 같이 하면 된다.
    
    
    while(defined($name = <WORDLIST>)){  #이 연산의 끝은 빈 문자열(undef)
        chomp($name);            #$name값이 저장되어 있는데 거기서 끝의 공백을 지워준다.
        $word = <WORDLIST>;        #$word라는 스칼라 변수에 그 다음값을 넣어준다.
        chomp($word);
        $words{$name= $word;  #words라는 곳에 $name의 키값으로 $word값을 넣는다. 해시
        print("name : ".$name."\n");
        print("word : ".$word."\n");
        print("words :".$words{$name}."\n");   #해시라서 키 값을 통해 값을 가지고 온다.
        print("\n\n");
    }
    close(WORDLIST) || die "cannot close wordlist : $!";  #파일 입출력이 끝났으면 핸들을 닫는다.
}
cs

 

이러한 예제입니다

접근하는 이름은 WORDLIST로 접근을 합니다. 또한, 아까 준비해둔 test2.txt 파일에 접근을 하게 됩니다.

>나 >>가 없으니 read입니다!

die와 $!은 주석에 설명이 되어 있으니 참고해주세요

출력이 꽤나 복잡하죠?

2줄씩 접근하는 것입니다.

먼저 $name을 통해 1줄에 접근하게 됩니다.

그리고 $word를 통해 그 다음 줄에 접근하게 됩니다

그리고 해시에 적용해보고자 $words라는 해시를 만들어서 $name을 키로 $word를 값으로 넣습니다

출력하면 아래 사진처럼 될 것입니다

 

이렇게 하면 읽기가 가능합니다

그럼 write는 어떻게 할까요?

먼저 테스트 파일을 2개 준비합니다

 

그리고 2.secret는 현재 내용이 없습니다

1.secret내용은 아래와 같습니다

네 그냥 아무렇게나 쓴 겁니다 ㅎㅎㅎ

그리고 예제를 보죠!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
init_fileIO2();
 
sub init_fileIO2{
    #이 함수는 1.secret라는 파일을 받아서 2.secret에 write한다.
    open(IN, "1.secret"|| die "파일 x 1 : $!";    
    open(OUT, ">2.secret"|| die "파일 x 2: $!";
    while(<IN>){
        print OUT $_;
    }
    close(IN) || die "cannot close IN : $!";
    close(OUT) || die "cannot close OUT : $!";
    print("end \n\n");
}
cs

 

1.secret은 read 용으로 읽어옵니다.

2.secret은 write로 접근을 하죠?

그래서 1.secret 접근자인 IN을 기준으로 반복문을 돕니다.

그리고 반복할 때마다 나오는 값을 $_ 변수로 받게 되죠

그걸 print로 OUT 접근자를 통해 secret2에 넣게 되죠

덧붙여졌네요!

이렇게 간단하게 펄의 파일 입출력을 알아봤습니다

 

 

 

 

반응형
그리드형
Comments