[Perl] File I/O

Linux 2011. 1. 5. 16:20
File I/O를 위한 filehandles 생성
$foo = open(MYFILE, "filename.txt");
$foo = open(MYFILE, "<filename.txt");
$foo = open(MYFILE, ">filename.txt");
$foo = open(MYFILE, ">>filename.txt");
여기서 $foo에는 file open이 성공시에는 1, 실패시에는 0이 저장되게 된다.
파일이름 앞의 부호는 각각
<  : open file for reading
>  : create file for writing
>>: open file for appending
을 의미한다.

Filehandles의 폐기
close(MYFILE);

Filehandles를 이용한 File Read
$str = <MYFILE>;
Input file의 한 line을 읽어 $str에 저장한다
@str = <MYFILE>;
Input file의 각각의 line이 @str array에 각각 저장된다.
여기서 읽은 파일은 각각의 줄 마지막에 \n이 붙게 되는데 이는 chomp를 통해 없애줄 수 있다.

예1)
$str = <MYFILE>;
chomp($str);

예2)
@str = <MYFILE>;
chomp(@str);

예2 에서 볼수 있듯이 array에 저장된 각각의 문장 마지막의 \n을 한꺼번에 없애 줄 수도 있다.

Filehandles를 이용한 File Write
print(MYFILE "Hello World");
print(MYFILE "%d", $i);
위와 같이 print문에 filehandles를 명시하여 file에 write를 할 수 있다.
여기서 유의할 점은 C의 문법과는 다르게 filehandle 다음에 ,(쉼표) 가 안붙는다는 것이다.

Binary File I/O
Binary file을 읽고 쓸때에는 일단 그 파일이 binary mode로 저장되어 있다는 것을 알려주어야만 한다.
$foo = open(MYFILE, "filename.txt");
binmode MYFILE;
이렇게 하면 위에서 열어준 파일은 binary mode로 읽거나 써야 한다는 것을 의미한다.

Binary File Read
Binary file은 일반 파일과 다르게 line의 개념이 없으므로
binary file의 몇 byte를 읽어 올지를 명시하여 읽어와야 한다.
$len = sysread(MYFILE, $buf, 4);
위와 같은 방법으로 읽으면 binary file MYFILE로 부터 4byte를 읽어 $buf에 저장하게 된다.
$len에는 read가 성공하면 1, 실패하면 0이 저장되게 된다.
저장된 4byte는 binary로 저장되어 있는데
이를 perl에서 사용가능한 variable로 바꾸어주기 위해서는
$value = unpack("H*", $buf);
이렇게 사용하여 $value의 값을 얻을 수 있다.
여기서 H*는 buf를 hexadecimal 값으로 변환하고, 0또는 1로 그 값을 padding하라는 의미이다.

Binary File Write
Binary file을 생성하기 위해서는 일단 저장되는 단위에 대해서 생각해봐야 한다.
Binary file은 charater(8bit)으로 저장되어야 한다.
$tmp = chr($value);
print (MYFILE "$tmp");
이런식으로 저장되어야 한다.

만약 value가 16진수라면
$tmp = chr(hex($value));
print (MYFILE "$tmp");
이런식으로 저장되어야 할 것이댜.

'Linux' 카테고리의 다른 글

[Perl] Hex to Bin Converter  (0) 2011.02.14
[vi] Folding  (0) 2011.02.08
[C shell] C shell에서 각 명령어의 return value 사용 ($status)  (0) 2010.11.25
[Tcl/Tk] Tcl/Tk 문법  (0) 2010.10.20
[awk] awk 사용법#5 - Functions  (0) 2010.05.17
Posted by sunshowers
,