Процедура SetLength в Delphi змінює розмір рядка або розмір динамічного масиву.
System unit
- procedure SetLength (var StringToChange : string; NewLength : Integer);
- procedure SetLength (var ArrayToChange : Array type; Dim1Length : Integer {;Dim2Length : Integer; ...});
Процедура SetLength змінює розмір рядка, одновимірного динамічного масиву або багатовимірного динамічного масиву.
Варіант 1.
При зміні розміру рядка StringToChange, новий розмір NewLength може бути меншим, таким самим або більшим, ніж у існуючого рядка. У всіх випадках розмір визначається в символах і в будь-якому випадку створюється новий рядок.
Якщо рядок коротший, то він відсікається. Якщо вона довша, то додані символи не будуть проініціалізовані. Це може дати дивний ефект – дивіться перший приклад.
Варіант 2.
Динамічний масив оголошується без завдання фіксованої довжини. Таке оголошення створює лише покажчик. Навіть багатовимірний динамічний масив створюється у вигляді одного неініціалізованого покажчика.
SetLength змінює довжину вимірювань Dim1Length, Dim2Length … масиву ArrayToChange. Це може бути зроблено кілька разів – не лише над неініціалізованим покажчиком. Наступні виклики зітруть дані або додадуть додаткове місце. Це додаткове місце ініціалізується лише в тому випадку, якщо воно містить рядки, інтерфейси або змінні типи Variant.
Dim1Length вказує на ліве (зовнішнє) вимірювання масиву.
Процедура SetLength: Робимо рядок меншим чи довшим
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 "
Процедура SetLength: Встановлення довжини одновимірних та багатовимірних масивів
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
Подібні функції, процедури та команди
Copy — створює копію частини рядка або частини масиву.
Length — повертає кількість елементів у масиві чи рядку.
SetString — копіює символи з буфера в рядок.
Slice — створює частину масиву з параметром "Відкритий Масив".
