Delphi code error not understood

Roger Alcindor
Roger Alcindor used Ask the Experts™
on
I am a total novice regarding Delphi. I am trying to build a package for eventual use in a C++ builder project (in which language I am not a novice).
I am using code that I have found for using Smart cards.
the following code fragment generates an error and I need assistance to understand why and correct it.
I am using Embarcadero RAD Studio 10.2 enterprise edition

var
  r : string;
  a : integer;
begin
  a := 1;
  while a <= Length(Input) do
    begin
    case Input[a] of
      #010       : if WantFormats then r := r + #10 else r := r + ' ';
      #013       : if WantFormats then r := r + #13 else r := r + ' ';
      #027       : if a < Length(Input) then
                     begin
                     Inc(a);
                     r := r + Extended[Ord(Input[a])+1];
                     end else r := r + ' ';
      #128..#255 : ; {<<<<<<<<< This line gerates the error }
      else r := r + Ascii[Ord(Input[a])+1];
      end;
    Inc(a);
    end;
Result := r;
end;


gives the following error message
[dcc32 Error] GsmHelper.pas(551): E2011 Low bound exceeds high bound

Open in new window

Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Geert GOracle dba
Top Expert 2009

Commented:
try it with ord(Input[a])

  case Ord(Input[a]) of
      10       : if WantFormats then r := r + #10 else r := r + ' ';
      13       : if WantFormats then r := r + #13 else r := r + ' ';
      27       : if a < Length(Input) then
                     begin
                     Inc(a);
                     r := r + Extended[Ord(Input[a])+1];
                     end else r := r + ' ';
      128..255 : ; {<<<<<<<<< This line gerates the error }
     else r := r + Ascii[Ord(Input[a])+1];
    end;

Open in new window

Geert GOracle dba
Top Expert 2009

Commented:
might also depend on the definition of input

is it ansistring or string ?

Author

Commented:
The error still persists even when no reference to Input is made and only the case range is used as per the code shown below ?


var
  r : string;
  a : integer;
begin
  a := 1;
  while a <10 do//<= Length(Input) do
    begin
      case a of //Input[a] of
      #128..#255 : ; {<<<<<<<<< This line gerates the error }
      end;
      Inc(a);
    end;
Result := r;
end;

Open in new window

Software architect
Top Expert 2012
Commented:
In Delphi 10.2 you cannot use Ord(Input[a]) cause ansistring not exists anymore. All strings are double-byte char strings.
In last example should be:
var
  r : string;
  a : byte;
begin
  a := 1;
  while a <10 do
    begin
      case a of 
       128..255 : ;
      end;
      Inc(a);
    end;
Result := r;
end;

Open in new window


... better work with byte array... here is how to convert strings to byte array...

Author

Commented:
Thanks for identifying the problem How far back in RAD Studio versions would I need to go to find that  AnsiStrings did exist in Delphi ?
Sinisa VukSoftware architect
Top Expert 2012

Commented:
Not sure but think from 10.2 ... Event before it is not recommend to use, but starting from 10.2 - AnsiString is not recognized any more as such..
Here is more info ...

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial