1

私はAdaを学んでおり、ファイル操作についていくつか説明する必要があります。タイプはfloatの1つだけで、float値を格納する2つのファイルを作成する必要があります(追加操作を使用)。したがって、float型のパッケージをインスタンス化してから、2つのファイル変数X_FileとY_Fileを宣言します。次に、ファイルがまだ存在しない場合に備えて例外を設定します。

WITH Ada.Text_IO;
WITH Ada.Sequential_IO;

PROCEDURE TestWrite6 IS
   PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Float);
   X_File : Seq_Float_IO.File_Type;
   Y_File : Seq_Float_IO.File_Type;


BEGIN

 Seq_Float_IO.Open (File => X_File, Mode => Seq_Float_IO.Append_File, 
 Name => "xvalues.dat");
 exception
 when Seq_Float_IO.Name_Error =>
  Seq_Float_IO.Create (File => X_File, Mode => Seq_Float_IO.Out_File, 
  Name =>  "xvalues.dat");

 Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File, 
 Name => "yvalues.dat");
 exception
 when Seq_Float_IO.Name_Error =>
  Seq_Float_IO.Create (File => Y_File, Mode => Seq_Float_IO.Out_File, 
  Name => "yvalues.dat");

END TestWrite6;

xvalues.datファイルとyvalues.datファイルごとに2つの個別の例外があります。コンパイルすると、次のエラーメッセージが表示されます。

16.
17.    Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File, Name => "xvalues.dat");
18.    exception
       |
    >>> exception handler not permitted here

19.    when Seq_Float_IO.Name_Error =>

xvalues.datには1つの例外があり、yvalues.datには2つ目の例外がないようです。私は何が間違っているのですか?

どうもありがとう...


いくつかの変更:ファイル内の値を開いて追加するための一般的な手順を記述します。

WITH Ada.Sequential_IO;
WITH Ada.Float_Text_IO;

PROCEDURE TEST is

package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
X_File : Seq_Float_IO.File_Type;


procedure Open_Data(File : in out Seq_Float_IO.File_Type; 
Name : in String) is

BEGIN

   begin
      Seq_Float_IO.Open (
         File => File,
         Mode => Seq_Float_IO.Append_File,
         Name =>  );
    exception
      when Seq_Float_IO.Name_Error =>
         Seq_Float_IO.Create (
           File => File,
           Mode => Seq_Float_IO.Out_File,
           Name =>  );
   end;

END Open_Data;


x        : CONSTANT Float := 2.0;


BEGIN --main program
   Open_Data(X_File, "xvalues.dat");
   Seq_Float_IO.Write(File => X_File,Item => x);

   Seq_Float_IO.Close(File => X_File);
END TEST;

プロシージャOpen_Dataで。何を入力すればよいかわからないため、Name=>の2つのフィールドを空白のままにしました。

また、File =>File...これは問題ないようです!!!

4

2 に答える 2

1

指定された一連のステートメントは、1セットの例外ハンドラーのみを持つことができます。1つのアプローチは、以下に示すように、処理された各ステートメントのシーケンスを独自のブロックでラップすることです。各ブロックの共通ステートメントに注意して、名前でファイルを開いたり作成したり、発生した例外を処理したりできる短いサブプログラムを作成することを検討してください。

with Ada.Sequential_IO;

procedure TestWrite6 is
   package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
   X_File : Seq_Float_IO.File_Type;
   Y_File : Seq_Float_IO.File_Type;

begin
   begin
      Seq_Float_IO.Open (
         File => X_File,
         Mode => Seq_Float_IO.Append_File,
         Name => "xvalues.dat");
   exception
      when Seq_Float_IO.Name_Error =>
         Seq_Float_IO.Create (
            File => X_File,
            Mode => Seq_Float_IO.Out_File,
            Name =>  "xvalues.dat");
   end;
   begin
      Seq_Float_IO.Open (
         File => Y_File,
         Mode => Seq_Float_IO.Append_File, 
         Name => "yvalues.dat");
   exception
      when Seq_Float_IO.Name_Error =>
         Seq_Float_IO.Create (
            File => Y_File,
            Mode => Seq_Float_IO.Out_File, 
            Name => "yvalues.dat");
   end;
end TestWrite6;
于 2010-07-03T12:47:33.760 に答える
0

フォローアップの質問:あなたはまだタイプの変数を持っている必要がありSeq_Float_IO.File_TypeますTestWrite6。このシグネチャを持つメソッドが与えられた場合:

procedure Open_Data(File : in out Seq_Float_IO.File_Type; 
                    Name : in String) is

in outパラメータには次の宣言が必要です。

X_File : Seq_Float_IO.File_Type;
Y_File : Seq_Float_IO.File_Type;

そして、あなたはこれらをこのように使うでしょう:

Open_Data(X_File, "xvalues.dat");
Open_Data(Y_File, "yvalues.dat");
Seq_Float_IO.Write(File => X_File, Item => ...);
Seq_Float_IO.Write(File => Y_File, Item => ...);
于 2010-07-03T16:03:23.960 に答える