Ada中的Get_line

时间:2013-10-15 00:57:12

标签: ada

我在使用get_line更具混乱性时遇到一些问题我必须从文件中取一行并使用它。我不知道特别是如果线条不仅仅是来自字符,那么浮动也可以在这种情况下使用get_line吗? 谢谢。让我们从这个小例子开始:

with Ada.Text_Io;

use Ada.Text_Io;

procedure Getline is

   A:String;

   T:string;

begin

   Open(File => F, Mode => In_File, Name => Nom_Fichier);

   A:=Get_Line(F,In_File, T);

   Put(A);

end Getline;`

2 个答案:

答案 0 :(得分:2)

看起来您只是猜测应该传递给Get_Line的参数。我建议您查看ARM中的相关部分:功能 Get_Line只需File_Type并返回String; 过程 Get_Line采用File_TypeString以及Natural作为输出参数。

然后,Stringindefinite subtype,这意味着您在声明时为A分配内容,或为其提供边界。这是您的示例代码的工作版本:

with Ada.Text_IO; use Ada.Text_IO;

procedure Getline is
   F : File_Type;
   File_Path : constant String := "testfile.stl";
begin
   Open (File => F, Mode => In_File, Name => File_Path);
   declare
      A : String := Get_Line (F);
   begin
      Put (A);
   end;
   Close (File => F);
end Getline;

在尝试更复杂的事情之前,您应该熟悉该语言的基础知识。 wikibook是一个很好的起点。如果您想从回答的行中获得有关读取浮点数的实际问题,则需要提供有关潜在行的外观的更多详细信息。

答案 1 :(得分:0)

Get_Line只是将“行”(字符集直到下一行终止符或文件末尾)解释为文本,并以此方式将其提供给调用者。因此,如果文件包含:

10.52

然后,您对Get_Line的调用将返回字符串“10.52”。

如果你试图使用Float_Text_IO读取它,你可能会得到浮动值10.52。但是,没有与文本文件中的文本相关联的元数据,因此计算机无法知道文本恰好是可表示的浮点数而无需解析它并查看它是否可以使其浮出。它当然不会费心去做,除非你通过调用Float_Text_IO

之类的东西要求它