2

我在使用 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;`
4

2 回答 2

5

看起来您只是在猜测应该传递给Get_Line. 我建议你看看ARM中的相关部分:该函数 Get_Line只接受 aFile_Type并返回 a String;该过程 Get_Line将 aFile_Type和 作为输出参数 aString和 a Natural

然后,String是一个不确定的子类型,这意味着你必须在声明时分配一些东西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是一个很好的起点。如果您想得到关于从行中读取浮点数的实际问题得到回答,您需要提供有关潜在行外观的更多详细信息。

于 2013-10-19T07:39:49.420 回答
0

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

10.52

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

如果您尝试阅读它,Float_Text_IO您可能会得到浮点值,这可能是真的10.52。但是,文本文件中没有与文本相关联的元数据,因此计算机无法知道文本恰好是可表示的浮点数,而无需对其进行解析并查看它是否可以从中产生浮点数。它当然不会费心去做,除非你通过类似电话的方式要求它Float_Text_IO

于 2013-10-18T19:11:28.513 回答