string - 如何从 Ada 中的其他字符串构建字符串?

标签 string ada

我想在日志文件中输出一个标题行,然后在数据之前输出一行“-”。为此,我创建了一个标题字符串,然后输出相同数量的“-”。

但是下面的代码总是以 CONSTRAINT_ERROR 失败,因为生成的字符串不是 1024 个字符。在 Ada 中,字符串分配需要完全相同的长度,而不仅仅是足够的容量。

选项 1) 是计算确切的长度,但这对 future 的变化很脆弱。
选项 2) 是使用字符串以外的东西。

procedure F() is 
    Msg : String(1..1024);
begin
    Open_Log();
    Msg :=       FLS(" Field1", 12) &
           "|" & FLS(" Field2", 12) &
           "|" & FLS(" Field3", 16);

    Log_To_File("# " & Msg);
    Log_To_File("# " & Fill_String(Msg'Last, '-'));
end;

最佳答案

很多习惯了 C 方式逐步构建字符串的人都难以将他们的思想围绕在 Ada 字符串上,这 您应该初始化并按原样使用 .当您了解有关 Ada 字符串的这一事实时,解决方案就变得简单多了。我什至可以扔掉你的“填充”例程。

procedure F() is  
   Msg : constant String
      := FLS(" Field1", 12) & 
       "|" & FLS(" Field2", 12) & 
       "|" & FLS(" Field3", 16); 
   Separator : constant String := (1..Msg'length => '-'); --'
begin 
   Open_Log(); 

   Log_To_File("# " & Msg); 
   Log_To_File("# " & Separator); 
end;

(注意:该评论是让 SO 的着色器重回正轨的技巧)

如果您不必使分隔符具有相同的长度,则您甚至不需要声明变量。

如果是我,我会做类似的事情 Log_To_File跟踪长度并根据要求生成自己的大小合适的分隔符。然后你可以写:
Open_Log();
Log_To_File ("# " & FLS(" Field1", 12) & 
       "|" & FLS(" Field2", 12) & 
       "|" & FLS(" Field3", 16)); 
Log_Separator_To_File;

关于string - 如何从 Ada 中的其他字符串构建字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263512/

相关文章:

string - 如何在 MongoDB 中查询 “falsey” 值?

java打印字符串给出指针编号

list - Ada 中的反向链表

ada - Ada 在哪里使用(除了安全关键软件)?

ada - 如何在 Ada 的数学运算中使用不同的固定点类型?

java - 无法对基本类型 boolean 调用 equals(boolean)

C# 字符串 4096 限制?

php 只允许使用 preg_match 的字母、数字、空格和特定符号

Ada 函数与过程

dll - 在 Ada 中动态链接库会引入额外的依赖项