Ada将Integer与String连接起来

时间:2014-07-10 03:18:12

标签: type-conversion ada string-concatenation

我需要将字符串与整数连接起来以创建唯一的文件名。

    I: Integer := 1;
    Base: String := "file";
    Suffix: String := ".data";

    -- Want to create file name as "Base + I + Suffix"
    file_name := "file1.data"

我该怎么做?

使用Integer索引整数字符/字符串数组然后将所有三个连接在一起会更容易吗?

3 个答案:

答案 0 :(得分:10)

file_name : String := Base & Ada.Strings.Fixed.Trim(Integer'Image(I), Ada.Strings.Left) & Suffix;

Integer'Image(I)以字符串形式返回I。如果I是非负的,则此函数返回一个以空格作为第一个字符的字符串; Trim函数删除前导空格(如果有)。

使用I作为字符串数组的索引并不容易。首先,在Ada的array String中,所有String元素必须具有相同的长度,如果I可能不起作用,则不会起作用>= 10。您必须使其成为一个访问字符串数组或Unbounded_String数组。在任何情况下,您都必须设置数组,可能使用的循环使用Image非常类似于上面的代码,所以它不会更容易。

答案 1 :(得分:5)

稍微扩展Brian的答案:

添加此功能:

function "&" (Left  : in String;
              Right : in Integer) return String is
begin
   return Left & To_String (Right);
end "&"

允许你写:

File_Name : constant String := Base & I & Suffix;

答案 2 :(得分:2)

ajb的答案是权威的,所以我只能添加几点:

1)你可以通过将其抽象为函数并写入来整理中间的混乱 Filename := "Base" + To_String(I) + "Suffix"

function To_String(I : Integer) return String is
begin
   return Ada.Strings.Fixed.Trim(Integer'Image(I), Ada.Strings.Left);
end To_String;

2)我经常感到好奇的是文本I / O重载了操作Get,Put(通用包)用于Integer和其他非文本数据类型,而字符串操作却没有。但是,很容易将To_String推广为通用整数类型。