Ada的命令行参数

Ada的命令行参数,ada,Ada,我正在写一个Ada程序,它应该对字母字符进行大小写转换。程序使用1、2或3个命令行参数。我几乎已经把这件事写好了,但我不知道该怎么做。命令行参数用于: 指定要进行大写转换还是小写转换的单个字符 应用于输入。”U'或U'表示大写转换;'L'或L'指定小写 转换。此参数是程序运行所必需的 (可选)用于输入大写/小写转换的文件名。 如果未指定此参数,则程序必须从标准输入读取 (可选,仅在还提供了第三个命令行参数时使用)的名称 用于加密或解密过程输出的文件。如果此参数为 未指定,程序必须写入标准输出 有

我正在写一个Ada程序,它应该对字母字符进行大小写转换。程序使用1、2或3个命令行参数。我几乎已经把这件事写好了,但我不知道该怎么做。命令行参数用于:

  • 指定要进行大写转换还是小写转换的单个字符 应用于输入。”U'或U'表示大写转换;'L'或L'指定小写 转换。此参数是程序运行所必需的
  • (可选)用于输入大写/小写转换的文件名。 如果未指定此参数,则程序必须从标准输入读取
  • (可选,仅在还提供了第三个命令行参数时使用)的名称 用于加密或解密过程输出的文件。如果此参数为 未指定,程序必须写入标准输出

  • 有什么帮助吗?

    您可以使用标准软件包访问命令行参数

    对于参数的数量,您有
    Argument\u Count

    您有
    参数(数字:正)
    来获取位置
    数字

    处的参数字符串。Ada.Command\u行包是标准的,完全适合您的任务

    使用Ada.command\u行进行更复杂的命令行解析变得很困难。如果您的命令行需要命名关联而不是位置关联,请参阅使用Gnat.command_line上的这一部分(如果需要的话,可移植性较低,但更像Unix的命令行参数和选项序列)


    还有一个我已经在一个小项目中成功使用过的方法。

    我建议这样做,正如使用Ada.Command\u 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;
    
    与
    Ada.Text_IO,
    Ada.命令行,
    Ada.Strings.Bounded;
    使用
    Ada.Text_IO,
    命令行;
    主要程序是
    包SB是新的Ada.Strings.Bounded.Generic_Bounded_Length(最大=>100);
    利用某人;
    Cur_参数:SB.Bounded_字符串;
    输入文件路径:SB.Bounded\u字符串;
    输出文件路径:SB.Bounded\u字符串;
    I:整数:=1;
    开始
    --对于所有给定的参数
    当我计数循环时
    Cur_参数:=SB.To_有界字符串(参数(I));
    如果Cur_Argument=“U”或Cur_Argument=“U”
    然后
    --大写的东西
    elsif Cur_Argument=“L”或Cur_Argument=“L”
    然后
    --小写的东西
    elsif Cur_Argument=“i”
    然后
    --下面是文件的路径
    输入文件路径:=SB.To有界字符串(参数(I+1));
    i:=i+1;
    elsif Cur_Argument=“o”
    然后
    输出文件路径:=SB到有界字符串(参数(I+1));
    i:=i+1;
    其他的
    放线(“错误参数”);
    如果结束;
    i:=i+1;
    端环;
    端干管;
    
    +1,用于在ADA中编写程序。最好拼写为女士的名字。此程序不符合规范:您发明了“i”和“o”,第一个参数是必需的,必须是l | l | u | u。如果用户在“i”或“o”之后漏掉文件名,会发生什么情况?没错,但我没有发现类似的情况。我认为完全检查文件路径(如果路径丢失就会失败)是另一个主题。使用GNAT时,在GNAT.Command_行中使用高级api要容易得多。资料来源: