2012-03-20 2 views
1

Я пытаюсь прочитать файл с одного столбца Long_Float значений в Ada следующим образом:Ada: чтение из файла

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 

Любой Хель 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. Если я хочу, чтобы value был типа Long_Float, так что я могу использовать числа 11.0, 23.0, 35.0 and 46.0 позже в моей программе, а затем как это сделать?

Спасибо.

ответ

3

В основном, вы создаете Sequential_IO для ввода/вывода двоичных значений, представляющих (длинные) числа с плавающей запятой. Это не то, что в вашем файле. Ваш файл содержит текстовые представления чисел с плавающей запятой.

В вашем примере избавиться от Sequential_IO и использовать обычный текстовый_файл.Open, чтобы открыть файл и Long_Float_Text_IO для значений Get().

Именно поэтому вы получаете сообщения об ошибках типа конфликта, вы пытаетесь выполнить операции Sequential_IO в переменной Long_Float_Text_IO File_Type.

+0

@ Marc C Спасибо. Он работает, но я хотел бы иметь возможность использовать значения в файле 'fx.txt' как' Long_Floats'. Как заставить переменную 'значение' принимать эти значения? ** См. Мой обновленный пост **. Я могу определить 'значение' для хранения массива значений, и это еще один шаг. 1 голос вверх. – yCalleecharan

+0

@yCalleecharan Вы неправильно читаете часть моего ответа. Вы используете * Long_Float_Text_IO.Get() * для получения значений, не заменяя их Text_IO.Get(). Поэтому верните значение как Long_Float и используйте правильный Get. –

+0

@ Marc C Большое спасибо. Теперь он отлично работает. Прошу прощения за неправильное толкование ваших предыдущих комментариев. – yCalleecharan