Arrays 使用字符串在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

我已经将一些数据从一个文件加载到三个类型为Unbounded_String的数组中,我将这些数组称为天、月和季节

每个数组都有一个对应的整数,该整数记录了数组中的项数,即。总天数、总月份和总季节

我希望遍历这三个数组,并输出所有数据,最好是某种形式的数据(这是伪Ada):

而我现在实际做的是

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