File io 仅从ada中的文件读取一个输入

File io 仅从ada中的文件读取一个输入,file-io,ada,procedural-programming,File Io,Ada,Procedural Programming,我在从文件中读取输入时遇到一些问题。所以我做了一个概念验证程序,这是我的主程序的一部分,做的更多,但我只是在读取输入时遇到了问题。 以下是我的概念验证计划: WITH Ada.Text_IO; USE Ada.Text_IO; with ada.Integer_Text_IO; use ada.Integer_Text_IO; PROCEDURE Open_File IS subtype idnum is string(1 ..7); -- Make short names so tha

我在从文件中读取输入时遇到一些问题。所以我做了一个概念验证程序,这是我的主程序的一部分,做的更多,但我只是在读取输入时遇到了问题。 以下是我的概念验证计划:

WITH Ada.Text_IO; USE Ada.Text_IO;
with ada.Integer_Text_IO; use ada.Integer_Text_IO;
PROCEDURE Open_File IS

subtype idnum is string(1 ..7);
   -- Make short names so that we can show where things come from

   My_File : File_Type;                  -- Name for file in this program
   Os_Name : String        := "My_Data.txt"; -- OS name for the file
   N       : idnum;                        -- Temporary for reading and printing file contents
   EOL : boolean;
   C : character;
BEGIN

   -- Open will raise an ADA.IO_EXCEPTIONS.NAME_ERROR expection
   -- if the file does not exist.

   Open (File => My_File, Mode => In_File, Name => Os_Name);

   LOOP
      EXIT WHEN End_Of_File (My_File);

      Look_Ahead(My_File, C, EOL);
      IF EOL THEN
         Skip_Line;
      ELSE
         IF C = ' ' THEN 
            Get(My_File, C);
         ELSE
            Get (My_File, N);
            Put_Line(N);
         END IF;
      END IF;         
   END LOOP;

   Close (My_File);
END open_file;
我的数据文件如下所示:(包括最后一个id后没有新行的空格)

当我编译并运行我的程序时,只有第一个id号被打印到屏幕上。我不知道在哪里检查我的代码,因为它应该继续获取id号,直到文件结束


任何帮助都将不胜感激。谢谢

当您获取第二行(以及第三行)时,将引发数据错误异常,因为
456784a
不是数字,“a”不是数字字符。如果希望它是十六进制数,则输入值应为16#456784a#(默认)。

如果遇到空行,会发生什么情况?(还有,您缺少一个END IF。)和
C
EOL
都没有定义,我修复了“END IF;”部分,它仍然只读取第一行。我改变了数据文件的切换顺序,在第一个id之前有一个空行,它仍然只读取第一个id。更新:在更新版本中也声明了EOL和CAlso,而不是我正在读取的整数。它是一个子类型idnum,是一个长度为7的字符串。但仍然存在相同的问题。提示:您调用Open、End\u Of\u文件、向前看、获取并关闭我的\u文件。那你跳过一行是为了什么文件?啊,是的,谢谢你,我不知道有参数的跳过行哇,我真不敢相信它这么简单。
1234567

       456784a

   6758abc