Arrays 使用字符串在Ada数组中循环
我已经将一些数据从一个文件加载到三个类型为Unbounded_String的数组中,我将这些数组称为天、月和季节 每个数组都有一个对应的整数,该整数记录了数组中的项数,即。总天数、总月份和总季节 我希望遍历这三个数组,并输出所有数据,最好是某种形式的数据(这是伪Ada): 而我现在实际做的是Arrays 使用字符串在Ada数组中循环,arrays,ada,Arrays,Ada,我已经将一些数据从一个文件加载到三个类型为Unbounded_String的数组中,我将这些数组称为天、月和季节 每个数组都有一个对应的整数,该整数记录了数组中的项数,即。总天数、总月份和总季节 我希望遍历这三个数组,并输出所有数据,最好是某种形式的数据(这是伪Ada): 而我现在实际做的是 for Count in 1 .. Days_Total loop Put_Line (Days (Count)); end loop; for Count in 1 .. Months_Total
for Count in 1 .. Days_Total loop
Put_Line (Days (Count));
end loop;
for Count in 1 .. Months_Total loop
Put_Line (Months (Count));
end loop;
for Count in 1 .. Seasons_Total loop
Put_Line (Seasons (Count));
end loop;
我猜我需要使用访问类型,但目前我很难找到它。完整的示例程序是(load_data_example.adb):
任何提示都将不胜感激。一种方法是:在记录中收集每个案例的所有信息,并构建一个可以排序的记录数组
类型项目列表为记录
总数:自然;
名称:小字符串数组;
结束记录;
类型类别为(天、月、季节);
项目:项目列表的数组(类别);
对于类别循环中的计数_1
对于1中的计数_2。。项目(计数1)。循环总数
放置行(项目(计数1)。名称(计数2));
端环;
端环;
一种方法是:收集记录中每个案例的所有信息,并构建一个可以排序的记录数组
类型项目列表为记录
总数:自然;
名称:小字符串数组;
结束记录;
类型类别为(天、月、季节);
项目:项目列表的数组(类别);
对于类别循环中的计数_1
对于1中的计数_2。。项目(计数1)。循环总数
放置行(项目(计数1)。名称(计数2));
端环;
端环;
扩展Brian的答案:在Ada 2012中,您有实现有界向量的容器,就像您使用的容器一样。您可以使用以下工具,而不是自己递增和检查总数:
package String\u Vectors是新的Ada.Containers.Bounded\u Vectors
(正、无界_字符串);
类型类别为(天、月、季节);
项目:字符串向量数组(类别)。向量(12);
开始
-- ... 这里还有其他代码
对于类别循环中的Catogory
对于项目中的项目(类别)循环
--在这个for循环中使用ADA2012迭代器。
--只生成实际附加的项
--到向量。
放线(项目);
端环;
端环;
扩展Brian的答案:在Ada 2012中,您有实现有界向量的容器,就像您使用的容器一样。您可以使用以下工具,而不是自己递增和检查总数:
package String\u Vectors是新的Ada.Containers.Bounded\u Vectors
(正、无界_字符串);
类型类别为(天、月、季节);
项目:字符串向量数组(类别)。向量(12);
开始
-- ... 这里还有其他代码
对于类别循环中的Catogory
对于项目中的项目(类别)循环
--在这个for循环中使用ADA2012迭代器。
--只生成实际附加的项
--到向量。
放线(项目);
端环;
端环;
看起来很有趣,我来看看。非常感谢。如果提供的答案之一是可以的,请检查它作为一个好答案。如果你不回答,恐怕没有人会再回答你的问题了。StackOverflow通过回答问题获得声誉积分。所以,如果你不给正确答案打分,或者不给答案打分,你就不会得到有趣的答案,我会查一查。非常感谢。如果提供的答案之一是可以的,请检查它作为一个好答案。如果你不回答,恐怕没有人会再回答你的问题了。StackOverflow通过回答问题获得声誉积分。所以,如果你不给正确答案打分,或者不给答案打分,你就不会得到答案。谢谢,这似乎比我一直尝试的要简单。
for Count in 1 .. Days_Total loop
Put_Line (Days (Count));
end loop;
for Count in 1 .. Months_Total loop
Put_Line (Months (Count));
end loop;
for Count in 1 .. Seasons_Total loop
Put_Line (Seasons (Count));
end loop;
with Ada.Strings.Unbounded, Text_IO, Ustrings;
use Ada.Strings.Unbounded, Text_IO, Ustrings;
procedure Load_Data_Example is
Max_Items : Constant := 12;
Datafile : File_Type;
Datafile_Name : String := "datafile";
type Small_String_Array is array (1 .. Max_Items)
of Unbounded_String;
Days, Months, Seasons : Small_String_Array;
Days_Total, Months_Total : Integer := 0;
Seasons_Total : Integer := 0;
Datafile_Len, Datafile_Skip : Integer := 0;
Line_Count, Lines_Expected : Integer := 0;
Data_Index, Input_Len : Integer := 0;
Input : Unbounded_String;
begin
Open (Datafile, In_File, Datafile_Name);
while (not End_Of_File (Datafile)) loop
Get_Line (Datafile, Input);
Datafile_Len := Datafile_Len + 1;
Input_Len := Length (Input);
if Line_Count <= (Lines_Expected - 1) then
Line_Count := Line_Count + 1;
end if;
if Datafile_Len = (Datafile_Skip + 1) then
Line_Count := 0;
Data_Index := Data_Index + 1;
Lines_Expected := Integer'Value (To_String (Input));
Datafile_Skip := Datafile_Skip + Lines_Expected + 1;
else
case Data_Index is
when 1 => Days (Line_Count) := Input;
Days_Total := Days_Total + 1;
when 2 => Months (Line_Count) := Input;
Months_Total := Months_Total + 1;
when 3 => Seasons (Line_Count) := Input;
Seasons_Total := Seasons_Total + 1;
when others => null;
end case;
end if;
end loop;
Close (Datafile);
for Count in 1 .. Days_Total loop
Put_Line (Days (Count));
end loop;
for Count in 1 .. Months_Total loop
Put_Line (Months (Count));
end loop;
for Count in 1 .. Seasons_Total loop
Put_Line (Seasons (Count));
end loop;
end Load_Data_Example;
3
Monday
Tuesday
Friday
4
April
June
August
September
2
Spring
Winter