2012-03-20 35 views
1

我想讀與Long_Float值的一列文件內容如下:阿達:在<code>Ada</code>從文件

with Ada.Text_IO; use Ada.Text_IO; 
with Ada.Long_Float_Text_IO; 
with Ada.Sequential_IO; 


procedure Test_Read is 

    package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Long_Float); 

    Input_File : File_Type; 
    value   : Long_Float; 

begin 

    Seq_Float_IO.Open (File => Input_File, Mode => Seq_Float_IO.In_File, Name => "fx.txt"); 
    while not End_OF_File (Input_File) loop 
    Seq_Float_IO.Read (Input_File, value); 
    Ada.Long_Float_Text_IO.Put (Item => value, Fore => 3, Aft => 5, Exp => 0); 
    end loop; 
    Seq_Float_IO.close (File => Input_File); 

end Test_Read; 

我得到許多錯誤信息在編譯:

17.  Seq_Float_IO.Open (File => Input_File, Mode => Seq_Float_IO.In_File, Name => "fx.txt"); 
            | 
    >>> expected private type "Ada.Sequential_Io.File_Type" from instance at line 10 
    >>> found private type "Ada.Text_Io.File_Type" 

18.  while not End_OF_File (Input_File) loop 
19.   Seq_Float_IO.Read (Input_File, value); 
           | 
    >>> expected private type "Ada.Sequential_Io.File_Type" from instance at line 10 
    >>> found private type "Ada.Text_Io.File_Type" 

文件fx.txt包含例如:

11.0 
23.0 
35.0 
46.0 

不限HEL p將會非常感激。

更新的代碼:

with Ada.Text_IO; use Ada.Text_IO; 


procedure Test_Read is 

    Input_File : File_Type; 
    value   : Character; 

begin 

    Ada.Text_IO.Open (File => Input_File, Mode => Ada.Text_IO.In_File, Name => "fx.txt"); 

    while not End_OF_File (Input_File) loop 
     Ada.Text_IO.Get (File => Input_File, Item => value); 
     Ada.Text_IO.Put (Item => value); 
     Ada.Text_IO.New_Line; 
    end loop; 
    Ada.Text_IO.Close (File => Input_File); 

end Test_Read; 

但現在輸出的是:

1 
1 
. 
0 
2 
3 
. 
0 
3 
5 
. 
0 
4 
6 
. 

的問題是,value被定義爲character。如果我想讓valueLong_Float這樣的類型,以便我可以在我的程序中稍後使用數字11.0, 23.0, 35.0 and 46.0,那麼該怎麼辦?

謝謝。

回答

3

基本上,您正在實例化Sequential_IO以對錶示(長)浮點數的二進制值執行I/O。這不是你文件中的內容。您的文件包含浮點數的文本表示。

在你的例子中,擺脫Sequential_IO並使用普通的Text_IO.Open打開文件並將Long_Float_Text_IO設置爲Get()值。

這就是爲什麼你會遇到類型衝突錯誤消息,你試圖對Long_Float_Text_IO File_Type變量執行Sequential_IO操作。

+0

@ Marc C謝謝。它可以工作,但我希望能夠使用'fx.txt'文件中的值作爲'Long_Floats'。如何讓變量'value'取這些值? **查看我更新的帖子**。我可以定義'value'來存儲一組值,這是另一步。 1投票。 – yCalleecharan 2012-03-20 19:31:20

+0

@yCalleecharan你誤解了我答案的一部分。您使用* Long_Float_Text_IO.Get()*獲取值,請勿使用Text_IO.Get()替換它。因此,將Value作爲Long_Float並使用正確的Get。 – 2012-03-20 19:38:26

+0

@ Marc C非常感謝。現在它工作正常。我很抱歉誤解你之前的評論。 – yCalleecharan 2012-03-20 19:45:09