我在使用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;`
答案 0 :(得分:2)
看起来您只是猜测应该传递给Get_Line
的参数。我建议您查看ARM中的相关部分:功能 Get_Line
只需File_Type
并返回String
; 过程 Get_Line
采用File_Type
和String
以及Natural
作为输出参数。
然后,String
是indefinite 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