Slice function in Delphi 8 - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Slice function in Delphi 8

Hi all,

I am learning Delphi 8. I am getting an error on using 'Slice' function.
"[Error] Unit1.pas(47): Slice standard function only allowed as open array argument"
The same code execute successfuly in Delphi 6. Code is as,

var
SliceMe : array [1..200] OF Integer;

procedure TakesArray(x : array of Integer);
var
str : String;
cnt : Integer;
begin
str := '';
for cnt := 0 to 24 do str := str+inttostr(x[cnt])+',';
showmessage(str);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
cnt : Integer;
begin
for cnt := 0 to 199 do SliceMe[cnt]:=cnt;
cnt := 0;
while cnt<200 do begin
TakesArray(Slice(SliceMe,25));
inc(cnt,25);
end;
end;

Can anybody help me reagarding this? Is there any unit i have to add in Delphi 8?

Thanks in advance.

Kruti.



Comments

  • zibadianzibadian Posts: 6,349Member
    : Hi all,
    :
    : I am learning Delphi 8. I am getting an error on using 'Slice' function.
    : "[Error] Unit1.pas(47): Slice standard function only allowed as open array argument"
    : The same code execute successfuly in Delphi 6. Code is as,
    :
    : var
    : SliceMe : array [1..200] OF Integer;
    :
    : procedure TakesArray(x : array of Integer);
    : var
    : str : String;
    : cnt : Integer;
    : begin
    : str := '';
    : for cnt := 0 to 24 do str := str+inttostr(x[cnt])+',';
    : showmessage(str);
    : end;
    :
    : procedure TForm1.Button1Click(Sender: TObject);
    : var
    : cnt : Integer;
    : begin
    : for cnt := 0 to 199 do SliceMe[cnt]:=cnt;
    : cnt := 0;
    : while cnt<200 do begin
    : TakesArray(Slice(SliceMe,25));
    : inc(cnt,25);
    : end;
    : end;
    :
    : Can anybody help me reagarding this? Is there any unit i have to add in Delphi 8?
    :
    : Thanks in advance.
    :
    : Kruti.
    :
    :
    :
    :
    You could try to use a temporary array variable, which holds only the subarray:
    [code]
    procedure TForm1.Button1Click(Sender: TObject);
    var
    cnt : Integer;
    IntArray: array of integer;
    begin
    for cnt := 0 to 199 do SliceMe[cnt]:=cnt;
    cnt := 0;
    while cnt<200 do begin
    IntArray := Slice(SliceMe,25);
    TakesArray(IntArray);
    inc(cnt,25);
    end;
    end;
    [/code]
    Another possibility is that Slice() can only take open arrays as parameters. In that case you should define SliceMe as an open array, and use SetLength() to (de)allocate it.
  • kgraphicskgraphics Posts: 2Member
    : : Hi all,
    : :
    : : I am learning Delphi 8. I am getting an error on using 'Slice' function.
    : : "[Error] Unit1.pas(47): Slice standard function only allowed as open array argument"
    : : The same code execute successfuly in Delphi 6. Code is as,
    : :
    : : var
    : : SliceMe : array [1..200] OF Integer;
    : :
    : : procedure TakesArray(x : array of Integer);
    : : var
    : : str : String;
    : : cnt : Integer;
    : : begin
    : : str := '';
    : : for cnt := 0 to 24 do str := str+inttostr(x[cnt])+',';
    : : showmessage(str);
    : : end;
    : :
    : : procedure TForm1.Button1Click(Sender: TObject);
    : : var
    : : cnt : Integer;
    : : begin
    : : for cnt := 0 to 199 do SliceMe[cnt]:=cnt;
    : : cnt := 0;
    : : while cnt<200 do begin
    : : TakesArray(Slice(SliceMe,25));
    : : inc(cnt,25);
    : : end;
    : : end;
    : :
    : : Can anybody help me reagarding this? Is there any unit i have to add in Delphi 8?
    : :
    : : Thanks in advance.
    : :
    : : Kruti.
    : :
    : :
    : :
    : :
    : You could try to use a temporary array variable, which holds only the subarray:
    : [code]
    : procedure TForm1.Button1Click(Sender: TObject);
    : var
    : cnt : Integer;
    : IntArray: array of integer;
    : begin
    : for cnt := 0 to 199 do SliceMe[cnt]:=cnt;
    : cnt := 0;
    : while cnt<200 do begin
    : IntArray := Slice(SliceMe,25);
    : TakesArray(IntArray);
    : inc(cnt,25);
    : end;
    : end;
    : [/code]
    : Another possibility is that Slice() can only take open arrays as parameters. In that case you should define SliceMe as an open array, and use SetLength() to (de)allocate it.
    :


    hi,

    I do the same as u described. But it still giving me the same error on line,

    IntArray := Slice(SliceMe,25);

    Also, i already checked the second option by defining SliceMe as an open array, but it doesnt make any mean.

    Thnx & Rgds,
    Kruti.

Sign In or Register to comment.