Справочник функций и процедур Delphi: SetLength

  Навигация по первой букве:

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

  Реклама:

 

SetLength
Процедура
Изменяет размер строки или размер динамического массива System unit
  
1 procedure SetLength ( var StringToChange : string; NewLength : Integer ) ;

2 procedure SetLength ( var ArrayToChange : Array type; Dim1Length : Integer {;Dim2Length : Integer; ...} ) ;

Google  
 
Описание
Процедура SetLength изменяет размер строки, одномерного динамического массива или многомерного динамического массива.

Вариант 1.

При изменении размера строки StringToChange, новый размер NewLength может быть меньше, такой же или больше, чем у существующей строки. Во всех случаях размер задается в символах и в любом случае создается новая строка.

Если строка короче, то она отсекается. Если она длиннее, то добавленные символы не будут проинициализированы. Это может дать странный эффект - смотрите первый пример.

Вариант 2.

Динамический массив объявляется без задания фиксированной длины. Такое объявление создает лишь указатель. Даже многомерный динамический массив создается в виде одного неинициализированного указателя.

SetLength меняет длину измерений Dim1Length, Dim2Length … массива ArrayToChange. Это может быть сделано несколько раз - не только над неинициализированным указателем. Последующие вызовы сотрут данные или добавят дополнительное место. Это дополнительное место инициализируется только в том случае, если оно содержит строки, интерфейсы или переменные типа Variant.

Dim1Length указывает на левое (внешнее) измерение массива.
Похожие команды
Copy  Создает копию части строки или части массива

Length  Возвращает число элементов в массиве или строке

SetString  Копирует символы из буфера в строку

Slice  Создает часть массива с параметром "Открытый Массив"

 
Пример кода : Делаем строку меньше или длиннее
var
  myString : string;
  onPos    : Integer;

begin
  // Присваиваем моей строке известную фразу
  myString := 'The cat sat on the mat';

  // Показ этого значения
  ShowMessage('"'+myString+'"');

  // Теперь делаем строку длиннее
  SetLength(myString, 25);

  // Показ снова этого значения
  // Обратите внимание, что строка закончена преждевременно
  // Это потому что дополнительные символы не инициализированы
  ShowMessage('"'+myString+'"');

  // Теперь делаем строку короче - прерывают перед 'sat'
  onPos := AnsiPos('sat', myString);
  SetLength(myString, onPos-1);

  // Показ этой строки снова
  // Теперь строка полностью инициализирована
  ShowMessage('"'+myString+'"');
end;
"The cat sat on the mat"
"The cat sat on the mat
"The cat "
 
Пример кода : Установка длины одномерных и многомерных массивов
var
  singleArray : array of string;
  multiArray  : array of array of Word;
  i, j : Integer;

begin
  // Установливаем длину одномерного массива
  SetLength(singleArray, 4);

  // Теперь заполняем : обратите внимание, что динамические массивы начинаются с 0
  ShowMessage('Одномерный массив :');
  for i := 0 to 3 do
  begin
    singleArray[i] := 'String '+IntToStr(i);
    ShowMessage('Элемент '+IntToStr(i)+' = '+singleArray[i]);
  end;

  // Устанавливаем длину многомерного массива
  SetLength(multiArray, 2, 3);

  // Теперь заполняем его
  ShowMessage('Многомерный массив :');
  for i := 0 to 1 do
    for j := 0 to 2 do
    begin
      multiArray[i,j] := i + j;
      ShowMessage('Элемент '+IntToStr(i)+','+IntToStr(j)+' = '+
                  IntToStr(multiArray[i,j]));
    end;
end;
Одномерный массив :
Элемент 0 = 0
Элемент 1 = 1
Элемент 2 = 2
Элемент 3 = 3
Многоиерный массив :
Элемент 0,0 = 0
Элемент 0,1 = 1
Элемент 0,2 = 2
Элемент 1,0 = 1
Элемент 1,1 = 2
Элемент 1,2 = 3
 


Copyright © 2004-2016 Delphi Sources (источник – "DelphiBasics.ru")
 


Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook