|
Изменяет размер строки или размер динамического массива
Описание:
Процедура SetLength изменяет размер
строки, одномерного динамического массива или многомерного динамического массива
Вариант 1.
При
изменении размера строки StringToChange, новый размер NewLength может быть
меньше, такой же или больше, чем у существующей строки. Во всех случаях размер
задается в символах и в любом случае создается новая строка.
Если строка короче, то она отсекается. Если она
длиннее, то добавленные символы не будут проинициализированы. Это может дать
странный эффект - смотрите первый пример.
Вариант 2.
Динамический массив объявляется без
задания фиксированной длины. Такое объявление создает лишь указатель. Даже
многомерный динамический массив создается в виде одного неинициализированного
указателя.
SetLength меняет длину измерений
Dim1Length, Dim2Length … массива ArrayToChange. Это может быть сделано несколько
раз - не только над неинициализированным указателем. Последующие вызовы сотрут
данные или добавят дополнительное место. Это дополнительное место
инициализируется только в том случае, если оно содержит строки, интерфейсы или
переменные типа Variant.
Dim1Length указывает
на левое (внешнее) измерение массива.
Пример кода:
var
myString : string;
onPos : Integer;
begin
// Set up my
string to hold a well known phrase
myString := 'The cat sat on
the mat';
// Display this string
ShowMessage('"'+myString+'"');
// Now make the string
longer
SetLength(myString, 25);
// Display
this string again
// Note that the string is prematurely
terminated
// This is because the extra characters are not
initialised
ShowMessage('"'+myString+'"');
// Now make the string shorter - chop from 'sat' onwards
onPos
:= AnsiPos('sat', myString);
SetLength(myString, onPos-1);
// Display this string again
// Now the
string is fully initialised
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
// Set the length of a single
dimension array
SetLength(singleArray, 4);
// Now fill it up : note that dynamic arrays start at 0
ShowMessage('Single dimensional array :');
for i := 0 to 3 do
begin
singleArray[i] := 'String
'+IntToStr(i);
ShowMessage('Element
'+IntToStr(i)+' = '+singleArray[i]);
end;
// Set the length of a multi dimensional array
SetLength(multiArray, 2, 3);
// Now fill it up
ShowMessage('Multi-dimensional array :');
for
i := 0 to 1 do
for j := 0 to 2 do
begin
multiArray[i,j] :=
i + j;
ShowMessage('Element
'+IntToStr(i)+','+IntToStr(j)+' = '+
IntToStr(multiArray[i,j]));
end;
end;
Пример кода:
Single dimensional array :
Element 0 = 0
Element 1 = 1
Element 2 = 2
Element 3 = 3
Multi-dimensional array :
Element 0,0 = 0
Element 0,1 = 1
Element 0,2 = 2
Element 1,0 = 1
Element 1,1 = 2
Element 1,2 = 3
|
|