Delphi справочник - Форум программистов - Навигация  
 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      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

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

2 procedure SetLength ( var ArrayToChange : Array type; Dim1Length : Integer {;Dim2Length : Integer; ...} ) ;
Описание
Процедура 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
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия