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