• Re: problemn with string'last

    From Dmitry A. Kazakov@21:1/5 to Daniel Gaudry on Fri May 5 12:02:02 2023
    On 2023-05-05 11:51, Daniel Gaudry wrote:

    here is a code that i simplified

    with Ada.Text_Io;
    procedure Help
    is
    Double_Quote : constant String(1 .. 1) := (others => '"' );
    Data : constant String := " PLUS_STRING : CONSTANT STRING(1..3) :=(1 =>'" & Double_Quote & "' , 2 =>'+' , 3 =>'" & Double_Quote & ");";
    begin

    Ada.Text_Io.Put_Line(" 05 10 15 20 25 30 35 40 45 50 55 65 70 75 80 85 90");
    Ada.Text_Io.Put_Line(" ....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!");
    Ada.Text_Io.Put_Line("»" & Data & "« " & Data'Last'Img);

    end Help;

    but the data'last seems not to match the string size

    It matches. You missed the "60" tick in your scale. (:-))

    --
    Regards,
    Dmitry A. Kazakov
    http://www.dmitry-kazakov.de

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Daniel Gaudry@21:1/5 to All on Fri May 5 02:51:53 2023
    hi,
    here is a code that i simplified

    with Ada.Text_Io;
    procedure Help
    is
    Double_Quote : constant String(1 .. 1) := (others => '"' );
    Data : constant String := " PLUS_STRING : CONSTANT STRING(1..3) :=(1 =>'" & Double_Quote & "' , 2 =>'+' , 3 =>'" & Double_Quote & ");";
    begin

    Ada.Text_Io.Put_Line(" 05 10 15 20 25 30 35 40 45 50 55 65 70 75 80 85 90");
    Ada.Text_Io.Put_Line(" ....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!");
    Ada.Text_Io.Put_Line("»" & Data & "« " & Data'Last'Img);

    end Help;


    but the data'last seems not to match the string size

    Any help is welcome
    best regards

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dmitry A. Kazakov@21:1/5 to Jeffrey R.Carter on Fri May 5 14:08:06 2023
    On 2023-05-05 13:17, Jeffrey R.Carter wrote:

    However, it's important to remember that 'Last is not necessarily the
    same as 'Length because 'First is not necessarily one. This is
    especially important in subprograms that take String parameters, as they
    are often passed slices.

    Non-sliding indices is one of the most useful Ada features. You can pass indices around as-is, which is extremely helpful when processing strings.

    You will also find that actually 'Length and 'Last have different types,
    which is quite useful as well.

    --
    Regards,
    Dmitry A. Kazakov
    http://www.dmitry-kazakov.de

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeffrey R.Carter@21:1/5 to Daniel Gaudry on Fri May 5 13:17:49 2023
    On 2023-05-05 11:51, Daniel Gaudry wrote:

    Ada.Text_Io.Put_Line(" 05 10 15 20 25 30 35 40 45 50 55 65 70 75 80 85 90");
    Ada.Text_Io.Put_Line(" ....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!....|....!");
    Ada.Text_Io.Put_Line("»" & Data & "« " & Data'Last'Img);

    As Kazakov pointed out, your scale is incorrect.

    However, it's important to remember that 'Last is not necessarily the same as 'Length because 'First is not necessarily one. This is especially important in subprograms that take String parameters, as they are often passed slices.

    Some questions:

    Double_Quote : constant String(1 .. 1) := (others => '"' );

    ARM 2.1(15/3) (http://www.ada-auth.org/standards/aarm12_w_tc1/html/AA-2-1.html#I1199) defines the name of '"' as "quotation mark". Why do you refer to a single quotation mark
    as Double_Quote?

    Data : constant String := " PLUS_STRING : CONSTANT STRING(1..3) :=(1 =>'" & Double_Quote & "' , 2 =>'+' , 3 =>'" & Double_Quote & ");";

    Wouldn't it be simpler and clearer to write this as

    Data : constant String := " PLUS_STRING : CONSTANT STRING := " & '"' & '+' & '"';

    ? Note also that you seem to be missing an apostrophe (''') before the right parenthesis if you intend Data to be a valid Ada declaration.

    --
    Jeff Carter
    "All citizens will be required to change their underwear
    every half hour. Underwear will be worn on the outside,
    so we can check."
    Bananas
    29

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Manuel Gomez@21:1/5 to All on Fri May 5 18:28:58 2023
    El 5/5/23 a las 13:17, Jeffrey R.Carter escribió:
    On 2023-05-05 11:51, Daniel Gaudry wrote:
       Data         : constant String         := "  PLUS_STRING    :
    CONSTANT STRING(1..3) :=(1 =>'" & Double_Quote & "' , 2 =>'+' , 3 =>'"
    & Double_Quote & ");";

    Wouldn't it be simpler and clearer to write this as

    Data : constant String := "  PLUS_STRING : CONSTANT STRING := " & '"' &
    '+' & '"';

    ? Note also that you seem to be missing an apostrophe (''') before the
    right parenthesis if you intend Data to be a valid Ada declaration.


    Or like this (doubling the quotes, which is the way to _escape_ the
    double quote inside Ada strings):

    Data : constant String := " PLUS_STRING :
    CONSTANT STRING(1..3) :=(1 =>'""' , 2 =>'+' , 3 =>'""');";

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Simon Wright@21:1/5 to Manuel Gomez on Fri May 5 17:33:18 2023
    Manuel Gomez <mgrojo@gmail.com> writes:

    Or like this (doubling the quotes, which is the way to _escape_ the
    double quote inside Ada strings):

    Data : constant String := " PLUS_STRING :
    CONSTANT STRING(1..3) :=(1 =>'""' , 2 =>'+' , 3 =>'""');";

    '"' is a single quote character.
    """" is a string containing one quote character.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Manuel Gomez@21:1/5 to All on Fri May 5 20:18:27 2023
    El 5/5/23 a las 18:33, Simon Wright escribió:
    Manuel Gomez <mgrojo@gmail.com> writes:

    Or like this (doubling the quotes, which is the way to _escape_ the
    double quote inside Ada strings):

    Data : constant String := " PLUS_STRING :
    CONSTANT STRING(1..3) :=(1 =>'""' , 2 =>'+' , 3 =>'""');";

    '"' is a single quote character.
    """" is a string containing one quote character.

    Yes, and "'""'" is a string containing a quote as an Ada character (when displayed).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From J-P. Rosen@21:1/5 to All on Fri May 5 21:52:38 2023
    Le 05/05/2023 à 20:18, Manuel Gomez a écrit :
    Yes, and "'""'" is a string containing a quote as an Ada character (when displayed).

    Even more fun (I use this for people who write a naive Ada parser):
    subtype C is Character;
    V : String := C'(')')'Img;

    --
    J-P. Rosen
    Adalog
    2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
    https://www.adalog.fr https://www.adacontrol.fr

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Simon Wright@21:1/5 to Manuel Gomez on Fri May 5 21:44:55 2023
    Manuel Gomez <mgrojo@gmail.com> writes:

    El 5/5/23 a las 18:33, Simon Wright escribió:
    Manuel Gomez <mgrojo@gmail.com> writes:

    Or like this (doubling the quotes, which is the way to _escape_ the
    double quote inside Ada strings):

    Data : constant String := " PLUS_STRING :
    CONSTANT STRING(1..3) :=(1 =>'""' , 2 =>'+' , 3 =>'""');";
    '"' is a single quote character.
    """" is a string containing one quote character.

    Yes, and "'""'" is a string containing a quote as an Ada character
    (when displayed).

    Oh, I see. Ugh.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeffrey R.Carter@21:1/5 to Simon Wright on Sat May 6 01:27:04 2023
    On 2023-05-05 22:44, Simon Wright wrote:
    Manuel Gomez <mgrojo@gmail.com> writes:

    El 5/5/23 a las 18:33, Simon Wright escribió:
    Manuel Gomez <mgrojo@gmail.com> writes:

    Data : constant String := " PLUS_STRING :
    CONSTANT STRING(1..3) :=(1 =>'""' , 2 =>'+' , 3 =>'""');";
    '"' is a single quote character.
    """" is a string containing one quote character.

    Yes, and "'""'" is a string containing a quote as an Ada character
    (when displayed).

    Oh, I see. Ugh.

    As you have discovered, using doubled quotation marks within a String literal can be significantly less clear than concatenating the quotation-mark Character with the rest of the String.

    --
    Jeff Carter
    "All citizens will be required to change their underwear
    every half hour. Underwear will be worn on the outside,
    so we can check."
    Bananas
    29

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)