Delphi-Help

Главная

SetLength

Печать
Рейтинг пользователей: / 1
ХудшийЛучший 

SetLength

Описание

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 указывает на левое (внешнее) измерение массива.

Пример кода

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

 

Примечание

 

 

Авторизация



Счетчики