コンピュータプログラミング-ファイルI / O
コンピュータファイル
コンピュータファイルは、プレーンテキスト、画像データ、またはその他のコンテンツなどのデジタル形式でデータを保存するために使用されます。コンピュータファイルは、さまざまなディレクトリ内に整理できます。ファイルはデジタルデータを保持するために使用されますが、ディレクトリはファイルを保持するために使用されます。
コンピュータファイルは、紙の文書のデジタル版と見なすことができます。プログラミング中は、ソースコードを異なる拡張子のテキストファイルに保存します。たとえば、Cプログラミングファイルは拡張子で終わります。.c、Javaプログラミングファイル .java、およびPythonファイル .py。
ファイル入力/出力
通常、メモ帳、MS Word、MS Excel、MS Powerpointなどのテキストエディタを使用してファイルを作成します。ただし、多くの場合、コンピュータプログラムを使用してファイルを作成する必要があります。コンピュータプログラムを使用して既存のファイルを変更できます。
ファイル入力とは、ファイルに書き込まれるデータを意味し、ファイル出力とは、ファイルから読み取られるデータを意味します。実際、入力と出力の用語は、画面の入力と出力に関連しています。結果を画面に表示するとき、それを出力と呼びます。同様に、コマンドプロンプトからプログラムに入力を提供する場合、それは入力と呼ばれます。
今のところ、ファイルへの書き込みはファイル入力であり、ファイルからの読み取りはファイル出力であることを覚えておくだけで十分です。
ファイル操作モード
コンピュータプログラムを使用してファイルの操作を開始する前に、ファイルが存在しない場合は新しいファイルを作成するか、既存のファイルを開く必要があります。いずれの場合も、次のモードでファイルを開くことができます-
Read-Only Mode−既存のファイルを読み取るだけで、ファイルにそれ以上のコンテンツを書き込みたくない場合は、ファイルを読み取り専用モードで開きます。ほとんどすべてのプログラミング言語は、読み取り専用モードでファイルを開くための構文を提供します。
Write-Only Mode−既存のファイルまたは新しく作成されたファイルのいずれかに書き込むが、そのファイルから書き込まれたコンテンツを読み取りたくない場合は、ファイルを書き込み専用モードで開きます。すべてのプログラミング言語は、書き込み専用モードでファイルを開くための構文を提供します。
Read & Write Mode −同じファイルの読み取りと書き込みを行う場合は、ファイルを読み取りと書き込みモードで開きます。
Append Mode−書き込み用にファイルを開くと、ファイルの先頭から書き込みを開始できます。ただし、既存のコンテンツがある場合は上書きされます。既存のコンテンツを上書きしたくない場合は、ファイルを追加モードで開きます。追加モードは、最終的には書き込みモードであり、ファイルの最後にコンテンツを追加できます。ほとんどすべてのプログラミング言語は、追加モードでファイルを開くための構文を提供します。
次のセクションでは、新しいファイルを開く方法、そのファイルに書き込む方法、そして後で、同じファイルにさらにコンテンツを読み取って追加する方法を学習します。
ファイルを開く
あなたは使用することができます fopen()新しいファイルを作成したり、既存のファイルを開いたりする機能。この呼び出しは、タイプのオブジェクトを初期化しますFILE、ストリームを制御するために必要なすべての情報が含まれています。これがプロトタイプです。つまり、この関数呼び出しのシグネチャです。
FILE *fopen( const char * filename, const char * mode );
ここに、 filename は文字列リテラルであり、ファイルに名前を付けてアクセスするために使用します mode 次のいずれかの値をとることができます-
シニア番号 | モードと説明 |
---|---|
1 | r 読み取り用に既存のテキストファイルを開きます。 |
2 | w 書き込み用のテキストファイルを開きます。存在しない場合は、新しいファイルが作成されます。ここで、プログラムはファイルの先頭からコンテンツの書き込みを開始します。 |
3 | a 追加モードで書き込むためのテキストファイルを開きます。存在しない場合は、新しいファイルが作成されます。ここで、プログラムは既存のファイルコンテンツにコンテンツの追加を開始します。 |
4 | r+ 両方を読み書きするためのテキストファイルを開きます。 |
5 | w+ 読み取りと書き込みの両方のテキストファイルを開きます。ファイルが存在する場合は、最初にファイルの長さをゼロに切り捨てます。それ以外の場合は、ファイルが存在しない場合はファイルを作成します。 |
6 | a+ 読み取りと書き込みの両方のテキストファイルを開きます。ファイルが存在しない場合は、ファイルを作成します。読み取りは最初から始まりますが、書き込みは追加することしかできません。 |
ファイルを閉じる
ファイルを閉じるには、 fclose( )関数。この関数のプロトタイプは次のとおりです。
int fclose( FILE *fp );
ザ・ fclose( ) 関数は成功するとゼロを返します、または EOF、特殊文字。ファイルを閉じるときにエラーが発生した場合。この関数は、実際には、バッファにまだ保留中のデータをファイルにフラッシュし、ファイルを閉じて、ファイルに使用されているメモリを解放します。EOFは、ヘッダーファイルで定義されている定数です。stdio.h。
ファイルを1文字ずつ、または固定長の文字列の形式で読み書きするために、C標準ライブラリによって提供されるさまざまな関数があります。次のセクションでそれらのいくつかを見てみましょう。
ファイルの作成
以下に示すのは、個々の文字をストリームに書き込む最も簡単な関数です。
int fputc( int c, FILE *fp );
関数 fputc() 引数cの文字値をによって参照される出力ストリームに書き込みます fp。成功時に書かれた文字を返します。それ以外の場合はEOFエラーがある場合。次の関数を使用して、nullで終了する文字列をストリームに書き込むことができます-
int fputs( const char *s, FILE *fp );
関数 fputs() 文字列を書き込みます sfpによって参照されるファイルに。成功すると負でない値を返します。それ以外の場合は戻ります。EOFエラーが発生した場合に返されます。この機能を使用することもできますint fprintf(FILE *fp,const char *format, ...)文字列をファイルに書き込みます。次の例を試してください-
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
}
上記のコードをコンパイルして実行すると、新しいファイルが作成されます test.txt に /tmpディレクトリを作成し、2つの異なる関数を使用して2行を書き込みます。次のセクションでこのファイルを読んでみましょう。
ファイルの読み取り
以下に示すのは、テキストファイルを文字ごとに読み取る最も簡単な関数です。
int fgetc( FILE * fp );
ザ・ fgetc() 関数は、によって参照される入力ファイルから文字を読み取ります fp。戻り値は読み取られた文字です。またはエラーが発生した場合は、EOF。次の関数を使用すると、ストリームから文字列を読み取ることができます-
char *fgets( char *buf, int n, FILE *fp );
関数 fgets() によって参照される入力ストリームから最大n-1文字を読み取ります fp。読み取った文字列をバッファにコピーしますbuf、追加 null 文字列を終了する文字。
この関数は、最大文字数を読み取る前に改行文字 '\ n'またはEOFを検出すると、新しい行文字を含め、その時点までに読み取られた文字のみを返します。使用することもできますint fscanf(FILE *fp, const char *format, ...) ファイルから文字列を読み取りますが、最初のスペース文字に遭遇すると読み取りを停止します。
#include <stdio.h>
main() {
FILE *fp;
char buff[255];
fp = fopen("/tmp/test.txt", "r");
fscanf(fp, "%s", buff);
printf("1 : %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("2: %s\n", buff );
fgets(buff, 255, (FILE*)fp);
printf("3: %s\n", buff );
fclose(fp);
}
上記のコードをコンパイルして実行すると、前のセクションで作成したファイルが読み取られ、次の結果が生成されます。
1 : This
2 : is testing for fprintf...
3 : This is testing for fputs...
ここで何が起こったのか分析してみましょう。まず、fscanf() メソッド読み取り Thisその後、スペースに遭遇したからです。2番目の呼び出しはfgets()、行末に到達するまで残りの行を読み取ります。最後に、最後の呼び出しfgets() 2行目を完全に読み取ります。
JavaでのファイルI / O
Javaは、ファイルI / Oを処理するためのさらに豊富な関数セットを提供します。このトピックの詳細については、Javaチュートリアルを確認することをお勧めします。
ここでは、上で説明したCプログラムと同等の単純なJavaプログラムを紹介します。このプログラムは、テキストファイルを開き、それに数行のテキスト行を書き込んで、ファイルを閉じます。最後に、同じファイルが開かれ、作成済みのファイルから読み取られます。次のプログラムを実行して、出力を確認できます-
import java.io.*;
public class DemoJava {
public static void main(String []args) throws IOException {
File file = new File("/tmp/java.txt");
// Create a File
file.createNewFile();
// Creates a FileWriter Object using file object
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write("This is testing for Java write...\n");
writer.write("This is second line...\n");
// Flush the memory and close the file
writer.flush();
writer.close();
// Creates a FileReader Object
FileReader reader = new FileReader(file);
char [] a = new char[100];
// Read file content in the array
reader.read(a);
System.out.println( a );
// Close the file
reader.close();
}
}
上記のプログラムを実行すると、次の結果が得られます。
This is testing for Java write...
This is second line...
PythonでのファイルI / O
次のプログラムは、新しいファイルを開いてコンテンツを書き込み、最後に同じファイルを読み取るための同じ機能を示しています。
# Create a new file
fo = open("/tmp/python.txt", "w")
# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");
# Close the file
fo.close()
# Open existing file
fo = open("/tmp/python.txt", "r")
# Read file content in a variable
str = fo.read(100);
print str
# Close opened file
fo.close()
上記のコードを実行すると、次の結果が得られます。
This is testing for Python write...
This is second line...