Functional-programming-file-io-operations

提供:Dev Guides
移動先:案内検索

ファイルI/O操作

プログラムの終了時にプログラムの出力を保存するファイルが必要です。 ファイルを使用すると、異なる言語のさまざまなコマンドを使用して関連情報にアクセスできます。

これは、ファイルで実行できるいくつかの操作のリストです-

  • 新しいファイルを作成する
  • 既存のファイルを開く
  • ファイルの内容を読む
  • ファイルのデータを検索する
  • 新しいファイルへの書き込み
  • コンテンツを既存のファイルに更新する
  • ファイルを削除する
  • ファイルを閉じる

ファイルへの書き込み

コンテンツをファイルに書き込むには、まず必要なファイルを開く必要があります。 指定したファイルが存在しない場合、新しいファイルが作成されます。

C ++を使用してファイルにコンテンツを書き込む方法を見てみましょう。

#include <iostream>
#include <fstream>
using namespace std;

int main () {
   ofstream myfile;
   myfile.open ("Tempfile.txt", ios::out);
   myfile << "Writing Contents to file.\n";
   cout << "Data inserted into file";
   myfile.close();
   return 0;
}

-

  • fstream は、ファイルの読み取り/書き込み操作を制御するために使用されるストリームクラスです。
  • ofstream は、コンテンツをファイルに書き込むために使用されるストリームクラスです。

関数型プログラミング言語であるErlangを使用して、ファイルにコンテンツを書き込む方法を見てみましょう。

-module(helloworld).
-export([start/0]).

start() ->
   {ok, File1} = file:open("Tempfile.txt", [write]),
   file:write(File1,"Writting contents to file"),
   io:fwrite("Data inserted into file\n").

-

  • ファイルを開くには、* open(filename、mode)*を使用する必要があります。
  • 内容をファイルに書き込む構文:* write(filemode、file_content)*。

出力-このコードを実行すると、「ファイルへのコンテンツの書き込み」がファイル Tempfile.txt に書き込まれます。 ファイルに既存のコンテンツがある場合は、上書きされます。

ファイルからの読み取り

ファイルから読み取るには、まず指定されたファイルを*読み取りモード*で開く必要があります。 ファイルが存在しない場合、それぞれのメソッドはNULLを返します。

次のプログラムは、 C ++ でファイルの内容を読み取る方法を示しています-

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
   string readfile;
   ifstream myfile ("Tempfile.txt",ios::in);

   if (myfile.is_open()) {
      while ( getline (myfile,readfile) ) {
         cout << readfile << '\n';
      }
      myfile.close();
   } else
      cout << "file doesn't exist";
   return 0;
}

それは次の出力を生成します-

Writing contents to file
-このプログラムでは、「ios
in」を使用して読み取りモードでテキストファイルを開き、その内容を画面に印刷します。 「getline」メソッドを使用して、 while ループを使用して、ファイルの内容を1行ずつ読み取りました。

次のプログラムは、 Erlang を使用して同じ操作を実行する方法を示しています。 ここでは、* read_file(filename)*メソッドを使用して、指定されたファイルからすべてのコンテンツを読み取ります。

-module(helloworld).
-export([start/0]).

start() ->
   rdfile = file:read_file("Tempfile.txt"),
   io:fwrite("~p~n",[rdfile]).

それは次の出力を生成します-

ok, Writing contents to file

既存のファイルを削除する

ファイル操作を使用して既存のファイルを削除できます。 次のプログラムは、C ++を使用して既存のファイルを削除する方法を示しています*

#include <stdio.h>

int main () {
   if(remove( "Tempfile.txt" ) != 0 )
      perror( "File doesn’t exist, can’t delete" );
   else
      puts( "file deleted successfully " );
   return 0;
}

それは次の出力を生成します-

file deleted successfully

次のプログラムは、 Erlang で同じ操作を実行する方法を示しています。 ここでは、メソッド* delete(filename)*を使用して既存のファイルを削除します。

-module(helloworld).
-export([start/0]).

start() ->
   file:delete("Tempfile.txt").

出力-ファイル「Tempfile.txt」が存在する場合、削除されます。

ファイルのサイズを決定する

次のプログラムは、C ++を使用してファイルのサイズを決定する方法を示しています。 ここで、関数 fseek は、ストリームに関連付けられた位置インジケータを新しい位置に設定しますが、 ftell はストリーム内の現在の位置を返します。

#include <stdio.h>

int main () {
   FILE * checkfile;
   long size;
   checkfile = fopen ("Tempfile.txt","rb");

   if (checkfile == NULL)
      perror ("file can’t open");
   else {
      fseek (checkfile, 0, SEEK_END);   //non-portable
      size = ftell (checkfile);
      fclose (checkfile);
      printf ("Size of Tempfile.txt: %ld bytes.\n",size);
   }
   return 0;
}

出力-ファイル「Tempfile.txt」が存在する場合、そのサイズがバイト単位で表示されます。

次のプログラムは、Erlangで同じ操作を実行する方法を示しています。 ここでは、メソッド* file_size(filename)*を使用してファイルのサイズを決定します。

-module(helloworld).
-export([start/0]).

start() ->
   io:fwrite("~w~n",[filelib:file_size("Tempfile.txt")]).

出力-ファイル「Tempfile.txt」が存在する場合、そのサイズがバイト単位で表示されます。 それ以外の場合、「0」が表示されます。