Ada的命令行参数

时间:2013-01-24 00:28:34

标签: ada

我正在编写一个Ada程序,该程序应该对字母字符进行大小写转换。该程序使用1,2或3个命令行参数。我几乎写了这个东西,但我不知道如何做参数。命令行参数是:

  1. 指定是进行大写转换还是小写转换的单个字符 适用于输入。 'U'或'u'表示大写转换; 'L'或'l'指定小写 转换。该参数是程序运行所必需的。
  2. (可选)用于输入大写/小写转换的文件的名称。 如果未指定此参数,则程序必须从标准输入读取。
  3. (可选,仅在提供第三个命令行参数时使用)名称 用于加密或解密过程输出的文件。如果这个参数是 未指定,程序必须写入标准输出。
  4. 任何帮助?

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;