我需要从用户那里获取输入并将数据保存在文件中,但不得覆盖数据。代码运行良好,但数据被覆盖。如何更正我的代码以获得期望的结果?
我无法设法覆盖数据。要求是:“要求用户一一输入名称,ID和CGPA,然后将其写入文件中。现有数据不得为”。我还尝试将新生成的文件数据存储在另一个文件中,但得到相同的结果。
with Ada.Command_Line, Ada.Text_IO;
use Ada.Command_Line, Ada.Text_IO;
procedure Main is
-- Initializing
Read_From : constant String := "inputFile.txt";
Write_To : constant String := "studentData.txt";
name : String (1 .. 13);
studentID : String (1 .. 11);
cgpa : String (1 .. 4);
Input, Output : File_Type;
begin
-- taking inputs
Put_Line ("My Student ID Is *******bc150400162*******");
Put_Line ("Enter the details for first student.");
Put_Line ("Please enter your name:");
Get (name);
Put_Line ("Please enter your Student ID:");
Get (studentID);
Put_Line ("Please enter your CGPA:");
Get (cgpa);
-- opening file
begin
Open (File => Input, Mode => In_File, Name => Read_From);
exception
when others =>
Put_Line
(Standard_Error,
"Can not open the file '" & Read_From & "'. Does it exist?");
Set_Exit_Status (Failure);
return;
end;
-- Creating new file file
begin
Create (File => Output, Mode => Out_File, Name => Write_To);
exception
when others =>
Put_Line
(Standard_Error, "Can not create a file named '" & Write_To & "'.");
Set_Exit_Status (Failure);
return;
end;
-- Here is the loop.............................................
------------------
loop
declare
Line : String := Get_Line (Input);
begin
Put_Line (Output, Line);
Put_Line (Output, "The Student details are: ");
Put_Line (Output, name);
Put_Line (Output, studentID);
Put_Line (Output, cgpa);
end;
end loop;
exception
when End_Error =>
if Is_Open (Input) then
Close (Input);
end if;
if Is_Open (Output) then
Close (Output);
end if;
end Main;
答案 0 :(得分:2)
执行此操作的标准方法是尝试在附加模式下打开文件,如果创建失败(同样,在附加模式下)。如果创建文件失败,您将遇到其他问题(例如,非法名称?没有权限?文件系统是只读文件?文件系统已满?在程序中这些地址都不可访问!)
注意,先打开,如果打开失败则创建;反之,文件被重置,这正是您不想要的。
with Ada.Text_IO;
with Ada.Calendar.Formatting;
with Ada.IO_Exceptions;
procedure Appending is
Output : Ada.Text_IO.File_Type;
Name : constant String := "appending.dat";
begin
我们需要在此处放置一个块,以便可以在此处捕获异常。
begin
尝试打开文件...
Ada.Text_IO.Open (File => Output,
Name => Name,
Mode => Ada.Text_IO.Append_File);
Open
成功!
exception
when Ada.IO_Exceptions.Name_Error =>
Open
失败,因为名称不代表可打开的文件。尝试创建它...
Ada.Text_IO.Create (File => Output,
Name => Name,
Mode => Ada.Text_IO.Append_File);
文件Output
现在以附加模式打开。
end;
为它写一些“独特”的东西,所以我们可以说它是有效的...
Ada.Text_IO.Put_Line
(File => Output,
Item => Ada.Calendar.Formatting.Image (Ada.Calendar.Clock));
...,我们完成了。可以退出操作系统以在退出时为我们关闭文件,但是请确保。
Ada.Text_IO.Close (File => Output);
end Appending;