Ada 如何读取文件中的某些特定列?

Ada 如何读取文件中的某些特定列?,ada,Ada,我有一个文本文件fx.txt的前几行,内容如下: t(ms) ForceX(N) ForceY(N) 0.0 10.0 20.0 1.0 15.0 10.9 2.0 12.0 30.0 我想读一下第一栏和第三栏的内容。在艾达怎么走 更新 以下是我的更新代码: with Ada.Text_IO; use Ada.Text_IO; with Ada.Long_Float_Text_IO; with Ada.IO_Exceptions;

我有一个文本文件
fx.txt
的前几行,内容如下:

t(ms) ForceX(N)  ForceY(N)
 0.0     10.0      20.0
 1.0     15.0      10.9
 2.0     12.0      30.0
我想读一下
第一栏和
第三栏的内容。在艾达怎么走

更新

以下是我的更新代码:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Long_Float_Text_IO;
with Ada.IO_Exceptions;


procedure Get_Projections is

   Input_File                : File_Type;
   Value                     : Long_Float;


   procedure Open_Data_Read (File : in out  Ada.Text_IO.File_Type;
                             Name    : in String;
                             Success : out Boolean) is separate;
   Success                   : Boolean;


begin

   Open_Data_Read (File => Input_File, Name => "fx.txt", Success => Success);
       if not Success then
          return;
       end if;

   Ada.Text_IO.Skip_Line(File => Input_File, Spacing => 1);

   while not End_Of_File (Input_File) loop

     begin
       Ada.Long_Float_Text_IO.Get (File => Input_File, Item => Value);
       exception
          when ADA.IO_EXCEPTIONS.DATA_ERROR =>
       Ada.Text_IO.Put_Line (" Data error");
     end;
     Ada.Long_Float_Text_IO.Put (Item => Value, Fore => 3, Aft  => 5, Exp  => 0);

     begin
       Ada.Long_Float_Text_IO.Get (File => Input_File, Item => Value);
       exception
          when ADA.IO_EXCEPTIONS.DATA_ERROR =>
       Ada.Text_IO.Put_Line (" Data error");
     end;
     Ada.Long_Float_Text_IO.Put (Item => Value, Fore => 3, Aft  => 5, Exp  => 0);

     begin
       Ada.Long_Float_Text_IO.Get (File => Input_File, Item => Value);
       exception
          when ADA.IO_EXCEPTIONS.DATA_ERROR =>
       Ada.Text_IO.Put_Line (" Data error");
     end;
     Ada.Long_Float_Text_IO.Put (Item => Value, Fore => 3, Aft  => 5, Exp  => 0);


   end loop;
   Ada.Text_IO.Close (File => Input_File);
   Ada.Text_IO.Put_Line (Item => "Reading file success: " & Boolean'Image (Success));


end Get_Projections;
分开
打开数据读取.adb

separate (get_projections)

procedure Open_Data_Read (File : in out  Ada.Text_IO.File_Type;
                 Name : in String; Success : out Boolean) is

   --this procedure prepares a file for reading
     begin
      Success := True;
      begin
         Ada.Text_IO.Open
           (File => File,
            Mode => Ada.Text_IO.In_File,
            Name => Name);
      exception
         when Ada.Text_IO.Name_Error  =>
         Success := False;
         Ada.Text_IO.Put (File => Standard_Error, Item => "****File not found....****");
         Ada.Text_IO.Put_Line (Item => "Reading file success: " & Boolean'Image (Success));
  end;
end Open_Data_Read;
未捕获异常数据错误。怎么了

注意,上面只是一段粗略的代码。我可以决定以后不在第二列“跳过任何前导空格、行终止符或页终止符”中存储值。一旦跳过页眉,只需继续读取,直到文件的
End\u
为真。三人一组调用
Get
,并放弃中间值

附录:大部分细节取决于目标。这是在报告格式错误的数字时获取第1列和第3列的最小尝试。另一种方法是将所有内容读取为
字符串
,并使用相应版本的
Get

with Ada.Text_IO;
with Ada.Float_Text_IO;

procedure Get_Data is

   package TIO renames Ada.Text_IO;
   package FIO renames Ada.Float_Text_IO;

   Data  : TIO.File_Type;
   Value : Float;

begin
   TIO.Open (Data, TIO.In_File, "data.txt");
   TIO.Skip_Line (Data);
   while not TIO.End_Of_File (Data) loop
        FIO.Get (Data, Value);
        FIO.Put (Value, 3, 5, 0); TIO.Put (" ");
        FIO.Get (Data, Value); -- Discard
        FIO.Get (Data, Value);
        FIO.Put (Value, 3, 5, 0); TIO.New_Line;
   end loop;
   exception
      when TIO.End_Error => null;
      when TIO.Data_Error =>
         TIO.Put_Line ("Data error: " & TIO.Name (Data));
end Get_Data;

@基思·汤普森:我能读一个只有一列的文件。我可以使用
Skip_Line
忽略标题。如果我认为这是请求转到列号的正确方法,我不知道如何使用
Set\u col
过程。然后,我不知道如何使用
Set\u Col
,仍然会制作两列供读取。我应该为每一行从列
1
3
处理
Set\u Col
吗?确实应该用所需的浮点类型实例化
Ada.Text\u IO.Float\u IO
,但
Ada.Float\u Text\u IO
Ada.Long\u Float\u Text\u IO
是一个方便的选择。这是可行的。但是在哪里放置行
Ada.Text\u IO.Skip\u行(1)
?我不能肯定地将它放入
而不是\u文件(输入\u文件)
循环的结尾。1向上投票。在循环开始之前,调用
跳过\u Line
。我通常在每组后检查文件的
End\u
,在这种情况下为三组。不要忘记捕捉数据错误。我劝你把这件事开一点;我的用法有点老套,可能有更好的方法。@trashgod我现在修改了代码,以放置
ADA.IO\u异常。数据错误
是独立的
Get
块。现在可以了吗?@trashgood当我在列中说出一个字符而不是一个数字时,
ADA.IO\u异常。DATA\u错误
不起作用。我做错了什么?