Описание |
Процедура 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
|
|