string - ada中的文件IO,如何将字符串写入文件?

标签 string io ada

我在将字符串变量写入文件时遇到了一些问题。 问题是我必须指定该字符串的确切长度。否则输出文件将只包含一些废料值。我想知道这是否可以以某种方式解决而无需事先告知字符串的长度?

我知道我的 Get() 过程存储了该变量的 Length,我可以将它返回给主程序。但是我想编写我的程序,以便在我开始写入输出文件之前先从输入文件中读取所有内容。

with  Ada.Text_Io, Ada.Integer_Text_Io;
use Ada.Text_Io,Ada.Integer_Text_Io;

procedure Uppgift is

   type Bil_Register is
      record
     Namn    : String(1..50);
     Adress  : String(1..50);
     Post    : String(1..50);
     Reg     : String(1..6);
      end record;   

   Infil  : File_Type;
   Utfil        : File_Type;
   L, I : Integer;

   Br : Bil_Register;

   procedure Get(F : in out File_Type; Br : out Bil_Register) is
      Length : Integer;
   begin
      Get_Line(F, Br.Namn, Length);      
   end;

begin

   Open(Infil, In_File, "register.txt");
   Create(Utfil, Out_File, "test.txt");

   Get(Infil, Br);
   Put_Line(Utfil, Br.Namn);

   Close(Infil);
   Close(Utfil);

end Uppgift;

-

编辑 (2011.08.20)

这似乎只是基于 Unix 的操作系统的问题。使用 Windows 时,当您将其打印到文件或屏幕时,您不必绝对使用字符串大小

最佳答案

嗯,必须在某处跟踪字符串有效部分的长度。

您可以将记录的每个字符串字段的有效长度保持为单独的字段:

Namn        : String (1..50);
Namn_Length : Natural;

您可以定义自己的变量字符串类型包,或使用预先存在的包,例如 Variable_Length .例如

Namn : Variable_Length.Variable_String(50);

您可以将 Unbounded_String 用于字段和变量:

Namn : Unbounded_String;

还有 Ada.Text_IO.Unbounded_IO对于 I/O:

with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;
with Ada.Text_IO.Unbounded_IO;

procedure UTIO_Demo is

   use Ada.Text_IO;

   F    : Ada.Text_IO.File_Type;
   Data : Unbounded_String := To_Unbounded_String("Output by Unbounded_IO");

begin
   Create(F, Ada.Text_IO.Out_File, "utio.tst");

   Unbounded_IO.Put_Line(F, Data);

   Close(F);
end UTIO_Demo;

如果您不想使用 Unbounded_IO 包,请使用 To_String 和 To_Unbounded_String 在 Unbounded_String 值和通过 Text_IO 读取和写入的字符串之间来回转换。

关于string - ada中的文件IO,如何将字符串写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483793/

相关文章:

python - 使用更改指示器拆分字符串 python

C - 使用字符指针替换文件中的字符串

python - 如何将带有空格分隔整数的多行字符串拆分为每行的列表列表

c - 用C语言在文件末尾写入信息

ada - -gnatyo 实际上执行什么样式检查?

java - 使用正则表达式获取文件名

python - 如何在不知道编码的情况下将字节写入 Python 3 中的文件?

c++ - printf 到控制台窗口和文件?

ada - GNAT 附带的 AUnit 中的错误

"S"的 Ada 实际值必须是一个变量