我需要将字符串与整数连接起来以创建唯一的文件名。
I: Integer := 1;
Base: String := "file";
Suffix: String := ".data";
-- Want to create file name as "Base + I + Suffix"
file_name := "file1.data"
我该怎么做?
使用Integer索引整数字符/字符串数组然后将所有三个连接在一起会更容易吗?
答案 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推广为通用整数类型。