0

尝试将 ada 程序的命令行参数分配给字符串变量时,我遇到了一些问题。

这是我的主要程序:

with Ada.Command_Line; use Ada.Command_Line;

procedure proc is
    cli_exception : exception;
    filename : String (1..Argument(1)'length);
    usage : String (1..31);
begin
    usage := "Usage: ./proc [filename]";

   if Argument_Count /= 1 then
       raise cli_exception;
   end if;

   for arg in 1..Argument_Count loop
       case arg is
           when 1 =>
               filename := Argument(arg);
           when others =>
               null;
       end case;
   end loop;

   put_line("filename is: " & filename);
exception
    when e: cli_exception =>
        put_line(usage);
end proc;

这里的问题在于过程的声明部分,其中设置了字符串“文件名”的上限。如果没有给出 CLI 参数,那么 Argument(1) 将在过程开始之前抛出异常,因为没有参数 #1。

输出是:

raised CONSTRAINT_ERROR : a-comlin.adb:65 explicit raise

有没有其他方法可以在不使用无界字符串且不选择任意数字的情况下定义该字符串变量的大小(因为完全限定的文件名可能会变得非常大)?

-谢谢

4

1 回答 1

3

在过程中使用声明块并filename使用参数值进行初始化:

-- ...
if Argument_Count /= 1 then
   raise cli_exception;
end if;

declare
   filename : String := Argument (1);
begin
   -- do what you want with the filename here.
end;

顺便说一句,你可以这样做usage

usage : String := "Usage: ./proc [filename]";

这样,您不必在每次更改字符串时计算字符数。

于 2013-07-22T06:34:33.497 回答