この質問は、での投稿のフォローアップです。
Adaのファイルへの書き込みについて。
この質問は別の投稿に配置することを選択しました。これは、前述の投稿でわずかに異なる問題(ファイル処理の例外)に関する回答をすでに受け入れているため、より多くの人に表示されるようにするためです。
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;
File_Name : String;
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 => File_Name );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => 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;
上記をコンパイルすると、次のようなエラーが発生します。
- X_File:Seq_Float_IO.File_Type;
- File_Name:文字列; |
制約のないサブタイプは許可されていません(初期化が必要)初期値または明示的な配列境界を提供します
- File_Name:文字列; |
私は2つのことを知りません:
- File_Name:String;があります。別のファイルに書き込めるようにしたいので。だから私は一般的な文字列が欲しいのですが、次のようなものではありません:
File_Name:CONSTANT String:= "one_File_Only.dat"
- プロシージャOpen_Dataを別々のadsファイルとadb(本文用)ファイルに保存する方がよいでしょうか?
どうもありがとう...
新着...
次のようにコードを変更しました。
WITH Ada.Sequential_IO;
PROCEDURE TEST1 is
package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
X_File, Y_File : Seq_Float_IO.File_Type;
Name_X : CONSTANT String := "domainvalues.dat";
Name_Y : CONSTANT String := "ordinatevalues.dat";
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 => Name_X );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => Name_X);
end;
END Open_Data;
x : CONSTANT Float := 2.0;
BEGIN --main program
Open_Data(File => X_File, Name => Name_X);
Seq_Float_IO.Write(File => X_File, Item => x);
Seq_Float_IO.Close(File => X_File);
Open_Data(File => Y_File, Name => Name_Y);
Seq_Float_IO.Write(File => Y_File, Item => x);
Seq_Float_IO.Close(File => Y_File);
END TEST1;
ご覧のとおり、私は
Seq_Float_IO.Open (
File => File,
Mode => Seq_Float_IO.Append_File,
Name => Name_X );
Nameが使用するパラメーターとしてName_Xを指定しましたが、Name_XまたはName_Yのいずれかである一般的な名前を渡すことができるはずなので、これは正しくありません。申し訳ありませんが、ここに何を入れるかわかりません。
よろしくお願いします。ありがとう