我正在编写一个Ada程序,该程序应该对字母字符进行大小写转换。该程序使用1,2或3个命令行参数。我几乎写了这个东西,但我不知道如何做参数。命令行参数是:
任何帮助?
答案 0 :(得分:8)
您可以使用标准包Ada.Command_Line
来访问命令行参数。
你有Argument_Count
个参数。
您有Argument(Number : Positive)
来获取位置Number
的参数字符串。
答案 1 :(得分:4)
Ada.Command_Line包是标准的,完全适合您的任务。
使用Ada.Command_Line,更复杂的命令行解析变得很困难。如果您的命令行需要命名而不是位置关联,请参阅此Gem from Adacore关于使用Gnat.Command_Line(不太可移植,如果重要,但是)更多类似Unix的命令行参数和选项序列。
我还在一个小项目中成功使用了Generic Command Line Parser。
答案 2 :(得分:1)
我建议使用Ada.Command_Line:
之类的东西with
Ada.Text_IO,
Ada.Command_Line,
Ada.Strings.Bounded;
use
Ada.Text_IO,
Ada.Command_Line;
procedure Main is
package SB is new Ada.Strings.Bounded.Generic_Bounded_Length (Max => 100);
use SB;
Cur_Argument : SB.Bounded_String;
Input_File_Path : SB.Bounded_String;
Output_File_Path : SB.Bounded_String;
I : Integer := 1;
begin
-- For all the given arguments
while I < Argument_Count loop
Cur_Argument := SB.To_Bounded_String(Argument(I));
if Cur_Argument = "U" or Cur_Argument = "u"
then
-- stuff for uppercase
elsif Cur_Argument = "L" or Cur_Argument = "l"
then
-- stuff for lowercase
elsif Cur_Argument = "i"
then
-- following one is the path of the file
Input_File_Path := SB.To_Bounded_String(Argument(I+1));
i := i + 1;
elsif Cur_Argument = "o"
then
Output_File_Path := SB.To_Bounded_String(Argument(I+1));
i := i + 1;
else
Put_Line("Wrong arguments");
end if;
i := i + 1;
end loop;
end Main;