System Lufimia 作業状況報告書 へ

特定のファイル名のファイルを読み込む

Cの場合

ソース

/* cardフォルダの下にある00000000.000ファイルを読み込む */
#include <stdio.h>

#define MAX_INBUFFER 4096

char inbuffer[MAX_INBUFFER];
int i;

FILE *fpin;

read(){
    fpin = fopen ( "card\\00000000.000" , "rb" );
    for ( i = 0 ; i < MAX_INBUFFER ; i ++ ){
        inbuffer[i] = fgetc( fpin );
    }
    close( fpin );
}

解説

C言語は機械語に近い分、プログラマの方でいろいろ準備してやらないといけません。
ファイルから読み込む場合、読み込んだ後の保存領域を確保する必要があります。
これが char inbuffer[MAX_INBUFFER]; です。
またファイルを読み込む場合には、単純にファイル名を指定するだけではだめで
ファイルを開くという作業を指定する必要があります。
fopen ( "card\\00000000.000" , "rb" );がこれ。
ちなみに"rb"は「バイナリーモードで読み込み専用で開くよ」という意味。
他の意味はこちら
実はこのファイルだとテキストモードで読み込んでも
そう変なことにはなりませんが
テキストモードは行末等を示すコードを自動変換してしまうので
ここでは自動変換しないバイナリーモードを使用しています。
開いたファイルは閉じておくのもお行儀。
そうするとファイルを指すポインタを使うと便利なので
ファイルポインタも事前に宣言しておきます。
さらにファイル操作の関数はライブラリを使用するので
冒頭で #include <stdio.h> を指定します。
ファイルを開く関数には1文字ずつ読み込む一番機械語に近い fgetc を使っていますが
もっと賢い関数は「行末までしか読み込まない」などの制限が入りますので
これまた愚直に1文字ずつ読み込む代わりに余計なことをしない関数を使っています。

perlの場合

ソース

open ( IN , "card\\00000000.000" );

@lines = <IN>;

close IN;

解説

Cに比べ実に簡単です。
というのは
・変数を宣言する必要がない→必要になると勝手に作ってくれる
という特徴を持っているからです。
しかも @lines = <IN>; で、linesという名の配列変数に
ファイルの内容を一気に読み込んでしまうことができるのです。
それで簡単になってしまう。
ちなみに配列変数なのはなぜかというと
1行目が$line[0]、2行目が$line[1]で、全部まとめて@lineだからです。

System Lufimia 作業状況報告書 へ